我有: @interface CMainTableViewController:UITableViewController
在那个班级里我有一个NSFetchResultController。
我有以下单独的数据管理器类: DB_ManagerSingleton //这里我有一个创建DB / persistent store
的UIManagedDocument要打开我的持久存储,我从DB_ManagerSingleton类中执行以下操作:
UIManagedDocument * fileDB = [[UIManagedDocument alloc] initWithFileURL:url];
if([[NSFileManager defaultManager] fileExistsAtPath:self.fileDB.fileURL.path] != TRUE)
{
[self.fileDB saveToURL:self.fileDB.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success)
{
[self completeDBSetup:success];
}];
}//End if
else if(self.fileDB.documentState == UIDocumentStateClosed)
{
[self.fileDB openWithCompletionHandler:^(BOOL success)
{
[self completeDBSetup:success];
}];
}//End else if
else if(self.fileDB.documentState == UIDocumentStateNormal)
{
[self completeDBSetup:TRUE];
}//End else if
completeDBSetup将4个NSManageObjects放入NSManagedObjectContext,并通知已注册的观察者持久存储被打开的成功:
if([CLevelFactory createLevels] == TRUE)
[self.fileDB.managedObjectContext save:&error];
for(id<DB_StateNotification> observer in self.arrNotificationDelegates)
{
if(observer != nil)
[observer DB_StateChange:self.isDBSetup];
}//End for loop
现在,在这种情况下,观察者是我的TableViewController类。在这个类中,我已经实现了NSFetchedResultsControllerDelegate中的所有方法,并且完全从Coredata书籍示例中复制了实现。
我在上面的DB_StateChange方法中设置tableView控制器的方式如下:
self.fetchResultController = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:dbMgr.fileDB.managedObjectContext
sectionNameKeyPath:@"levelID"
cacheName:nil];
self.fetchResultController.delegate = self;
NSError *error = nil;
self.bQuerierYourData = [self.fetchResultController performFetch:&error];
NSArray *fetchedObjects = [self.fetchResultController fetchedObjects];
//NOTE: I ALWAYS have a count greater than 0. Even on the first run.
if(fetchedObjects.count > 0)
[self.tableView reloadData];
现在的问题是: 我的应用程序第一次启动时,我会在我的表视图中蹲下。我得到一个4的fetchedObjects.count - 这是我所期望的,但不是在表视图中。现在,没有任何接触。不插入,更新或删除持久性存储中的任何内容,我只需快速应用程序。在这种情况下,按下调试器上的停止按钮。当我继续并重新启动应用程序时,一切都很漂亮。我不会在每次应用程序启动时插入数据,我测试并且如果数据已经存在,我只是继续而不插入任何数据。
有谁知道这里发生了什么?