5

私は次のコードを使用しています:

+(void)deleteObject:(NSManagedObjectID*)oId {
NSError *error;
DFAppDelegate *temp = [DFAppDelegate new];
NSManagedObjectContext *context = [temp managedObjectContext];
NSManagedObject *obj = [context existingObjectWithID:oId error:&error];
[context deleteObject:obj];
}

しかし、それはそれに応じて機能していないようです。iOS シミュレーターでアプリケーションを再起動すると、リストにオブジェクトが再び表示されます。指定されたオブジェクト ID でオブジェクトを印刷しようとしましたが、正しいオブジェクトが返されますが、コア データ モデルからオブジェクトが完全に削除されません。私のエンティティはどれも別のエンティティと関係がありません。

何が問題なのか誰か説明してもらえますか?

ありがとう。

編集:エラーを確認しましたが、エラーは表示されません。

4

2 に答える 2

24

に加えた変更は、NSManagedObjectContext保存するまで一時的なものです。これをメソッドの最後に追加してみてください:

if (![context save:&error]) {
     NSLog(@"Couldn't save: %@", error);
}
于 2012-12-21T12:38:48.383 に答える
3

NSManagedObjectContextスクラッチ パッドを提供します。オブジェクトで好きなことを行うことができますが、最後に保存する必要があります。デフォルトの Core Data プロジェクトを使用している場合は、次のメソッドを参照してくださいAppDelegate

- (void)saveContext
{
    NSError *error = nil;
    NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
    if (managedObjectContext != nil) {
        if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
             // Replace this implementation with code to handle the error appropriately.
             // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        } 
    }
}
于 2012-12-21T12:41:05.997 に答える