我有:@interface CMainTableViewController:UITableViewController
在那个类中,我有一个 NSFetchResultController。
我有以下单独的数据管理器类: DB_ManagerSingleton //这里我有一个 UIManagedDocument 创建 DB/持久存储
要打开我的持久存储,我从 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];
现在的问题是:我的应用程序第一次启动时,我蹲在我的表格视图中。我得到一个 fetchedObjects.count 4 - 这是我所期望的,但不是在表视图中。现在,什么都不碰。不插入、更新或删除持久存储中的任何内容,我只是快速应用程序。在这种情况下,点击调试器上的停止按钮。当我继续并重新启动应用程序时,一切都很漂亮。我不会在每次应用程序启动时插入数据,我会进行测试,如果数据已经存在,我会继续前进而不插入任何数据。
有谁知道这里发生了什么?