2012-02-13 7 views
2

からすべてのオブジェクトを削除した後に空の状態に保つ:NSArrayControllerは、私はCoreDataからすべてのオブジェクトを削除するために、以下の方法を使用していますCoreData

- (void)removeAllObjects:(id)sender{ 
    [[self managedObjectContext] lock]; 
    [[self managedObjectContext] reset]; 
    NSPersistentStore *store = [[[self persistentStoreCoordinator] persistentStores] lastObject]; 

    if (store) 
    { 
     NSURL *storeUrl = store.URL; 
     NSError *error; 

     if ([[self persistentStoreCoordinator] removePersistentStore:store error:&error]) 
     { 
      __persistentStoreCoordinator = nil; 
      __managedObjectContext = nil; 
      __managedObjectModel = nil; 
      NSLog(@"storeUrl %@", storeUrl); 


      if (![[NSFileManager defaultManager] removeItemAtPath:storeUrl.path error:&error]) 
      { 
       NSLog(@"\nresetDatastore. Error removing file of persistent store: %@",[error localizedDescription]); 
      } 
      else 
      { 
       NSLog(@"Recreating"); 
       //now recreate persistent store 
       // [self persistentStoreCoordinator]; 
       [[self managedObjectContext] unlock]; 
      } 
     } 
     else 
     { 
      NSLog(@"\nresetDatastore. Error removing persistent store: %@", [error localizedDescription]); 
     } 
    } 
    else 
    { 
     NSLog(@"\nresetDatastore. Could not find the persistent store"); 
    } 
} 

すべてが素晴らしい仕事するように見えます。すべてを削除した後、再び新しいオブジェクトを追加できます。しかし、新しいオブジェクトは、managedObjectContextにバインドされているNSArraycontrollerには表示されません。アプリケーションを再起動すると、すべての新しいオブジェクトがArrayControllerにあり(テーブルビューに表示されます)

バインディングが何らかの形で失われているかどうかを確認しましたが、すべて正しいです。

私は間違っていますか?私は起動時に起こる何かを逃す必要があります。しかし何?

(私はARCが有効になっている)

+0

Yikes、それをNSArrayControllerと呼んではいけません。 NSArrayはデータ型です。 'Controller'は' ViewController'オブジェクト用に予約されています。 –

+1

エム、私はNSArrayControllerについて話しています。 https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSArrayController_Class/Reference/Reference.html – Daniel

+0

+1 Whoa ...心が吹かれました。 –

答えて

2

O_O NSArrayControllerははmanagedObjectContextにバインドされています。 DBをリセットするとき、managedObjectContextをnilに設定し、その後、新しいmanagedObjectContextを割り当てます。長いストーリー:リセット後に新しいMOCにバインドする必要があります。

+0

明白な^^ '[scansArrayControllerバインド:@" managedObjectContext "toObject:self withKeyPath:@" managedObjectContext "options:nil];'ありがとう! – Daniel

関連する問題