我正在使用带有故事板的核心数据的应用程序。该应用程序将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中都有它。
我在我的uitableview控制器中实现了nsfetchedresultcontroller。
manged对象返回数据库中的确切数据,但ui表不会刷新。我也做了[self.tableview reloaddata]
但没有运气
答案 0 :(得分:1)
在2选项卡中应该有一些事情要通知数据库更新中的数据更新新数据,有没有?如果
NSManagedObjectContext, NSFetchedResultsController
在2个标签中说
实施NSFetchedResultsController
委派方法。
secTab.managedObjectContext = self.managedObjectContext;
当然现在有效
答案 1 :(得分:1)
在带有UITableVIew的viewController中,实现NSFetchedResultsControllerDelegate的方法。文档完全实现了这些方法。
然后让你的viewController成为NSFetchedResultsController fetchedResultsController.delegate = self;