NSFetchResultController:只有初始加载在tableViewController的表中没有显示任何数据

时间:2012-06-06 05:10:26

标签: nsfetchedresultscontroller

我有: @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书籍示例中复制了实现。

http://developer.apple.com/library/ios/#samplecode/CoreDataBooks/Listings/Classes_RootViewController_m.html#//apple_ref/doc/uid/DTS40008405-Classes_RootViewController_m-DontLinkElementID_14

我在上面的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 - 这是我所期望的,但不是在表视图中。现在,没有任何接触。不插入,更新或删除持久性存储中的任何内容,我只需快速应用程序。在这种情况下,按下调试器上的停止按钮。当我继续并重新启动应用程序时,一切都很漂亮。我不会在每次应用程序启动时插入数据,我测试并且如果数据已经存在,我只是继续而不插入任何数据。

有谁知道这里发生了什么?

0 个答案:

没有答案