【问题标题】:ios5 core data: nsfetchresultcontroller refresh uitableios5核心数据:nsfetchresultcontroller refresh uitable
【发布时间】:2012-03-04 16:15:34
【问题描述】:

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

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;
}

它是你使用核心数据模板时的代码。仅调整以与我的应用程序一起使用。我在我的两个视图控制器中都有它。

编辑 2

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

【问题讨论】:

    标签: core-data ios5 storyboard


    【解决方案1】:

    在带有 UITableVIew 的 viewController 中实现 NSFetchedResultsControllerDelegate 的方法。该文档具有这些方法的完整实现。

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

    【讨论】:

    • 我已经设置了 fetchedResultsController.delegate = self;并且也有这3种方法。托管对象上下文计数返回数据库中数据的确切数量,但不会显示
    • 我又看了一遍。我不知道 nsfetchresultcontrollor 出了什么问题,并且我在错误的位置放置了 tableview beginupdate。但现在完美无缺。我滥用了 sharedapp 委托来设置托管对象上下文我的观点。不知道它是否是最佳实践。
    • 不知何故,您可能有两个不同的托管对象上下文。此外,听起来您需要在退出选项卡 1 时保存上下文。
    【解决方案2】:

    在 2 选项卡中应该有一些东西来通知数据库中的数据更改更新新数据,有吗?如果

    NSManagedObjectContext, NSFetchedResultsController 在 2 标签中说 实现NSFetchedResultsController 委托方法。

    在应用程序中

    secTab.managedObjectContext = self.managedObjectContext;
    

    现在肯定可以用了

    【讨论】:

    • 是的,正如我在帖子中所写的那样,我确实将 managedobjectcontext 从应用委托传递到两个视图。但它不刷新。
    • 是否有任何机制来通知从 1 个选项卡到 2 个选项卡的更改?通常,该机制是通知或 NSFetchedResultsController 委托方法。
    • 这是我的问题,该怎么做。我确实有 nsfetchresultcontroller。请查看我正在更新的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 2018-01-08
    相关资源
    最近更新 更多