2011-09-09 4 views
4

あなたはあなたのエンティティ構造を変更したときにiPhoneシミュレータでcoredataストアをリセットする方法を知っていますか?iphoneからcoredataを削除するには

iPhoneで最後に実行したコアデータストアとは異なる新しいバージョンのコアデータストアを作成した場合も同様のプロセスを実行する必要がありますか?もしそうなら、いかがですか?

おかげ

答えて

9

便利なのは、アプリを通じて永続ストアを削除する方法をコーディングするまでは、電話からアプリを削除するだけです。 (アイコンがひっくり返るまでホームスクリーンに指を置いてからアプリのxをクリックする)その後、Macに接続された携帯電話でXcodeで[製品]> [実行]を選択すると、アプリは電話機に再インストールされますデータディレクトリ。

デプロイメントのために、デプロイ後にデータモデルを変更する場合は、アプリケーションを削除せずにデプロイする方法を思いつく必要があります。データの移行が最適なオプションですが、それ以外の場合は永続ストアファイルを削除できません。その前にユーザーの承認を求めるのが望ましいでしょう。彼らが重要なデータを持っている場合、彼らはあなたのアプリケーションの古いバージョンを元に戻してデータを表示し、手動で移行するか、データ移行のバグを修正するバージョン2.0.1をリリースするまで待つことができます。

+0

おかげでmorningstar!私は今のところあなたの最初の選択肢を試しました。私は、私のデータストアが削除されることを警告した時、私は大好きでした。ただ欲しかったのです。 – Jazzmine

1

/Users/username/Library/Application Support/iPhone Simulator/4.3.2であなたのアプリを見つける(iOSのバージョンが異なる場合があります)とあなたが設定にpersistentStoreCoordinatorに送信されているパスを見て、そのファイルを削除することができ.sqliteファイル

+0

あなたがシミュレータへのパスを提供したようです。私は自分の携帯電話でデータストアを削除しようとしています。しかし、ありがとう。 – Jazzmine

+1

申し訳ありませんが、誤解されています。最初の部分ではシミュレータを頼んだので、シミュレータデータベースを意味すると思いました。ごめんなさい。 –

+0

問題なく、提供することに感謝します。 – Jazzmine

0

を削除します。私が取ったアプローチは、自動的に移行するようにストアを設定し、それが失敗した場合はストアを削除し、もう一度空のパスを使用するpersistentStoreCoordinatorを作成しようとします。

古いデータベースに格納されているものを再作成する必要があるかもしれないことを忘れないでください。

+0

こんにちはケンダル:あなたは私に教えてください:1.どのように自動移行するためにストアをセットアップする2.私はどのようにchownの上に提供する以外の私の携帯電話から店舗を削除しますか? – Jazzmine

+0

NSFileManagerを使用してファイルを削除するだけです。ストアを自動移行する方法の例はたくさんあります。 –

6

私は自分のアプリケーションコンテンツをリセットするためのルーチンです。ストアが保存されている他のファイルが消去されます。

- (void) resetContent 
{ 
    NSFileManager *localFileManager = [[NSFileManager alloc] init]; 
    NSString * rootDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
    NSURL *rootURL = [NSURL fileURLWithPath:rootDir isDirectory:YES]; 

    NSArray *content = [localFileManager contentsOfDirectoryAtURL:rootURL includingPropertiesForKeys:nil options:NSDirectoryEnumerationSkipsSubdirectoryDescendants error:NULL]; 

    for (NSURL *itemURL in content) { 
     [localFileManager removeItemAtURL:itemURL error:NULL];  
    } 

    [localFileManager release]; 
} 

あなただけがそのファイル名を知っているので、あなたはドキュメントディレクトリの内容を列挙控えることができ、店舗を消去したい場合:

- (void) resetContent 
{ 
    NSFileManager *localFileManager = [[NSFileManager alloc] init]; 
    NSString * rootDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; 
    NSURL *rootURL = [NSURL fileURLWithPath:rootDir isDirectory:YES]; 

    NSURL *storeURL = [rootURL URLByAppendingPathComponent:@"myStore.sqlite"]; 
    [localFileManager removeItemAtURL:storeURL error:NULL];  

    [localFileManager release]; 
} 

しかし、多くの場合、それを注意して良くしてくださいモデルを削除するのではなく、モデルを変更したときにストアを移行します。

+0

しかし、ジャーナリングモードの場合は、 "myStore.sqlite-shm"と "myStore.sqlite-wal"ジャーナルファイルも削除してください(ジャーナリングモードの場合はiOS 7以降で作成されます)。彼らは役に立たない。 –

関連する問題