2011-02-25 6 views
1

私のiPhoneアプリケーションでコアデータを使用しています。シミュレータで使用するとうまく動作しますが、デバイスにデプロイすると、Core Dataストアの値がアプリケーションに見つかりません。 iPhoneに値を挿入すると、Core Dataの値が見つかります。コアデータ:永続ストアはXcodeでは動作しますが、デバイスでは動作しません

Core DataをiPhoneに配備する際に、Core Dataの価値を維持する必要があります。

誰でもこれを行う方法を知っていれば助けてください。

+0

私たちに何かをお与えになると、役に立つ回答が得られる可能性が高くなります。 "私はXをやろうとしていますが、私のコードはYのように見えますが、私はAをやると思っていましたが、代わりにBでした。私のコンソール出力は 'C' – occulus

+0

また、http://msmvps.com/blogs/jon_skeet/archive/2010/08/29/writing-the-perfect-question.aspx – occulus

+0

OPの著者は、ネイティブエリシア語のスピーカーではありません。私は彼が、既存の永続ストアがXcodeでうまく動作する理由を尋ねていますが、デバイスでは失敗すると思います。 – TechZen

答えて

1

それは非常に簡単です...

  • あなたのCoreDataデータベースファイルを準備
  • という名前を付け、例えば
  • InitialData.sqliteは、アプリケーションバンドル

に追加... NSPersistentStoreCreation割り当て&の初期化の直前にこのようなものを追加します。

NSString *storePath = ... your store path for persistent store coordinator ...; 

NSFileManager *fileManager = [NSFileManager defaultManager]; 
if (![fileManager fileExistsAtPath:storePath]) { 
    NSString *initialStorePath = [[NSBundle mainBundle] pathForResource:@"InitialData" ofType:@"sqlite"]; 
    if (defaultStorePath) { 
    [fileManager copyItemAtPath:initialStorePath toPath:storePath error:NULL]; 
    } 
} 

私はあなたのアプリケーションにいくつかのデフォルトデータをコピーしたいと仮定します。それは私があなたの質問から推測することができます - それはあなたが本当に望むものはかなり不明です。

+0

'defaultStorePath'は宣言されていません、あなたは' initialStorePath'を意味しましたか? – Stunner

2

デバイスにインストールされているアプリケーションを含むすべてのファイルは、ファイルを読み取り専用にする変更不可能なアプリケーションバンドルに含まれている必要があります。

アプリケーションにCore Data永続ストアファイルを含めると、アプリケーションバンドル内に存在し、読み取り専用ストアとして永続ストアコーディネータにのみ追加できます。書き込みを試みるとエラーが発生します。

通常は、標準のファイル操作を使用して、アプリケーションバンドルからアプリケーションのDocumentsまたはLibraryフォルダにコピーされた永続ストアファイルを使用するように、Readwriteストアが必要です。アプリケーションが起動すると、アプリケーションデリゲートは、コアデータスタックを初期化する前にストアの存在をチェックし、まだ実行していない場合はコピーします。

また、1つのスタックに2つのストアを使用するより高度なオプションがあります.1つは読み取り専用で、もう1つは読み取り専用です。しかし、その方法はデータモデルに複雑さをもたらし、通常は必要ありません。

関連する問題