2016-09-12 10 views
2

は私がIMessageが拡張(MSMessagesAppViewController)のうち、CoreDataを読み取ろうとするが、何のAppDelegateがないとしても、何のmanagedContextはありませんしています。IMessageが拡張とCoreData

これが可能なら誰でも考えられますか? 私のAppなどのAppDelegateをインスタンス化することは可能ですか?

アップデート:アプリ内コアのデータにアクセスする方法拡張子:このためのソリューションはAPPGROUPコンテナを使用することです。

+0

Core Dataを使用するアプリケーションの委任者は必要ありません。 2つは完全に無関係です。 –

+0

@TomHarrington質問の答えとして、それを拡大してもいいですか? :) –

答えて

3

コアデータを使用することは、アプリケーションデリゲートがあるかどうかとは関係ありません。彼らは2つの別々のものです。 をまとめていますが、コアデータもアプリケーションデリゲートもそれを必要としません。それは非常に良いデザインではありません。アプリデリゲートの仕事は、起動、バックグラウンドへの進出などのアプリライフサイクルイベントに対応することです。アプリのデータを管理する別の仕事を混在させることは悪い設計です。

Xcodeで新しいプロジェクトを作成し、[コアデータを使用する]チェックボックスをオンにすると、アプリケーションのコアデータを設定するためのアプリケーションデリゲートクラスのメソッドがXcodeに含まれます。しかしそのコードはどんなクラスにも入れられます。そのクラスにコードを必要とするアプリケーションデリゲートについて特別なことは何もありません。 Xcodeがそのクラスにそのコードを置くのは、それがであることを意味するわけではありません。そのようにするにはが必要です。アプリデリバリーでコアデータを使用する必要がある場合は、それを行う必要があります。

一般的なアプローチの1つは、コアデータを管理するための新しいクラスを作成することです。アプリケーションデリゲートではなく、すべてのコアデータスタック管理コードをそこに置きます。アプリケーションデリゲートは、このクラスのインスタンスをアプリケーションに作成します。アプリエクステンションでは、エクステンションのタイプに必要な場所でクラスをインスタンス化できます。

+0

ありがとう@TomHarrington、一方私はAppDelegateが必要ではないことを理解します。しかし、エクステンションからデータにアクセスするにはAppGroup Containerが必要です。 –

+0

@KevinLieser trueですが、あなたの質問には、アプリケーションデリゲートがいないときに何をすべきかが具体的に尋ねられました。あなたが示唆したように、アプリケーションデリゲートをインスタンス化するのは正しいアプローチではありません。 –

+0

あなたのご協力ありがとうございます! –

関連する問題