1

からいくつかのオブジェクトを削除しようとしていEntity Reservationます。私はこのようにしています。

NSManagedObjectContext *context = reservation.managedObjectContext;
[context deleteObject:reservation];
NSError *error = nil;
if (![context save:&error]) {
    NSLog(@"Error is %@",error);
}

その後、オブジェクトを削除して、全体entityを再度取得します。オブジェクトが my から削除されていることがわかりますentity。しかし、アプリを再起動すると、前のセッションで削除したすべてのオブジェクトが my entity.

restkitWeb サービスから取得したオブジェクトを格納するために使用しています。また、オブジェクトを削除すると、データベースでも削除されます。

アプリを再起動してログを見ると、前のセッションで削除した Web サービスからオブジェクトが返されていないことがわかります。それで問題ありません。唯一の問題は、それらがどういうわけか my に保存されていることcore databaseです。

4

1 に答える 1

0

reskit がスレッドでの保存/削除をどのように処理するかは完全にはわかりませんが、基本的に、メインスレッドで NSManagedObjectContext をセットアップすると、通知用に登録されます。

-(NSManagedObjectContext *)aContext
{
   if (!_aContext) {
       _aContext = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
       [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mergeChanges:) name:NSManagedObjectContextDidSaveNotification object:nil];
   }
   return _aContext;
}

バックグラウンド スレッドでコンテキストの変更が発生すると、通知が送信されます。

-(void)mergeChanges:(NSNotification *)aNotification
{
 // Merge the changes from the notification
 // on the main thread as this is the main
 // context for our application.
 dispatch_async(dispatch_get_main_queue(), ^{

    [self.aContext mergeChangesFromContextDidSaveNotification:aNotification];
 });
}
于 2013-08-13T06:56:45.920 に答える