1

これは、ここでの私の以前の問題の続きです。シミュレーターをリセットすることで、以前はすべての問題が解決し、アプリを完成させました。

iPhoneデバイスにアプリをインストールするときにまったく同じ問題が発生します。2番目のエンティティが含まれていない古いバージョンのデータベースを取得し、2番目のエンティティにアクセスしようとするとクラッシュします。

2010-04-22 23:52:18.860 albumCloud[135:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'Image''
2010-04-22 23:52:18.874 albumCloud[135:207] Stack: (
  843263261,
  825818644,
  820669213,
  20277,
  844154820, 
  16985,   
  14633,   
  844473760,   
  844851728,   
  862896011,   
  843011267,   
  843009055,   
  860901832,   
  843738160,   
  843731504,   
  11547,   
  11500   
 )

terminate called after throwing an instance of 'NSException'

2つの質問があります:

1)どうすれば、古いデータが削除されるほどアプリを携帯電話から完全に削除できますか?(私はこれまで、定期的なアプリの削除、削除してからホームと電源を保持して再起動し、アプリの実行中にアプリを罵倒して脅迫しようとしました...すべて)

2)アプリケーションがAppストアにあるときにこれが発生しないようにするにはどうすればよいですか?何らかの理由で、ストアに別のエンティティを追加するか、既存のエンティティに別の属性を追加することにしましたか?「xが存在しない場合は作成する」方法はありますか?

4

1 に答える 1

1

アプリを完全に削除するには、通常の方法でアプリを削除する必要があります。つまり、アプリが揺れるまで押し続けて、削除ボタンをタップします。次に、iTunesに接続します。iTunesがアプリとそのバックアップデータを毎回復元している可能性があります。

後で新しいエンティティを追加することをサポートするために、ここで説明するバージョン管理と自動軽量移行を使用する必要があります。

http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweight.html#//apple_ref/doc/uid/TP40008426-SW1

Design->Data Model基本的に、Xcodeのメニュー項目(Xcode4の[エディター]->[モデルバージョンの追加])を使用してデータモデルの新しいバージョンを作成し、コードをいくつか変更します。これにより、CoreDataは古いモデルを新しいモデルに自動的に移行します。実行できる変更の種類には制限があります。新しいエンティティを追加し、既存のエンティティにオプションの属性を追加するか、デフォルト値が設定された必須の属性を追加できます。

私が気付いたのは、NSManagedObjectModelバージョン管理と移行を使用するときにコアデータをロードする方法が変わることです。移行がなければ、おそらくこれがあります:

NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil];

バージョン管理と移行の使用を開始したら、これを次のように変更する必要があります。

NSString *path = [[NSBundle bundleForClass:self.class] pathForResource:@"DataModelName"
                                                                ofType:@"momd"];
NSURL *url = [NSURL fileURLWithPath:path];
NSManagedObjectModel *model = [[[NSManagedObjectModel alloc] initWithContentsOfURL:url] autorelease];
于 2010-04-23T08:06:28.773 に答える