ios5核心数据:nsfetchresultcontroller刷新uitable

时间:2012-02-13 08:33:30

标签: core-data ios5 storyboard

我正在使用带有故事板的核心数据的应用程序。该应用程序将uitabbarcontroller作为rootview。我创建了实体并生成了类。每个标签都有自己的uinavigation控制器。选项卡1中的视图只是从uilabels中保存数据库中的一些数据。它工作正常,数据在数据库中。 选项卡2中的视图显示uitableview中数据库中的数据。数据仅在我杀死应用程序并重新启动时显示。所以ui表不会刷新。 第一种方法:我已将appobate上下文中的managedobject上下文传递给两个视图。所以ui表不会刷新,直到杀死并重新启动。 第二种方法:i(mis)使用了app委托,但结果仍然相同。

MyApplicationDelegate *appDelegate = (MyApplicationDelegate *)[[UIApplication sharedApplication] delegate];

如何实现一个视图只将数据添加到核心数据(它现在正在执行),第二个视图会收到更改通知并在uitableview中显示?

修改

-(NSFetchedResultsController *) fetchedResultsController
{
if (__fetchedResultsController != nil) {
    return __fetchedResultsController;
}

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Favis" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"chapterid" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortDescriptor, nil];

[fetchRequest setSortDescriptors:sortDescriptors];

[NSFetchedResultsController deleteCacheWithName:@"Master"];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Master"];
aFetchedResultsController.delegate = self;

self.fetchedResultsController = aFetchedResultsController;


NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}

return __fetchedResultsController;
}

使用核心数据模板时的代码。只调整使用我的应用程序。我在我的两个viewcontroller中都有它。

编辑2

我在我的uitableview控制器中实现了nsfetchedresultcontroller。 manged对象返回数据库中的确切数据,但ui表不会刷新。我也做了[self.tableview reloaddata]但没有运气

2 个答案:

答案 0 :(得分:1)

在2选项卡中应该有一些事情要通知数据库更新中的数据更新新数据,有没有?如果

NSManagedObjectContext, NSFetchedResultsController在2个标签中说 实施NSFetchedResultsController委派方法。

在appdelegate中

secTab.managedObjectContext = self.managedObjectContext;

当然现在有效

答案 1 :(得分:1)

在带有UITableVIew的viewController中,实现NSFetchedResultsControllerDelegate的方法。文档完全实现了这些方法。

然后让你的viewController成为NSFetchedResultsController fetchedResultsController.delegate = self;

的委托