2012-02-13 21 views
2

删除所有对象,我使用下面的方法,以便从CoreData删除所有对象后:NSArrayController的保持为空从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中(并出现在我的tableView中)

我检查绑定是否以某种方式丢失,但一切正确。

我在做什么错?我必须错过启动时发生的事情。但是什么? O_O

(我启用了ARC)

+0

哎呀,不要称之为'NSArrayController'。 'NSArray'是一个数据类型。 'Controller'保留给'ViewController'对象。 – 2012-02-13 22:15:37

+1

Em,但我正在谈论NSArrayController。 https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSArrayController_Class/Reference/Reference.html – Daniel 2012-02-13 22:48:31

+0

+1哇......头脑风暴。 – 2012-02-14 00:16:10

回答

2

NSArrayController的绑定到managedObjectContext。重置数据库时,您将managedObjectContext设置为nil,然后您将分配一个新的managedObjectContext。长话短说:复位后,您需要绑定到新的MOC。

+0

听起来很明显^^'[scansArrayController bind:@“managedObjectContext”toObject:self withKeyPath:@“managedObjectContext”options:nil];'谢谢! – Daniel 2012-02-14 22:11:36