【问题标题】:How do I trigger a reload in an NSFetchedResultsController without changing the fetched object?如何在不更改获取的对象的情况下触发 NSFetchedResultsController 中的重新加载?
【发布时间】:2010-08-10 12:17:21
【问题描述】:

在我的 iPhone 应用程序中,我有一个 NSFetchedResultsController 在 UITableView 中显示用户对象。用户对象有 0-many Log 对象。 Log 对象的摘要与它们的 User 对象一起显示在 UITableView 中。

我的应用程序使用标签栏,因此日志标签中的用户输入需要触发用户标签的 NSFetchedResultsController 以重新加载。

到目前为止,我通过写入 User 对象来做到这一点:

log.user = nil;
log.user = [User current]; // Same as before. Just triggering a reload.
NSError *error = nil;
[myManagedObjectContext save:&error];

这很好用,但看起来有点像 hack。

有没有更好的方法来做到这一点?就像指定 Log 对象中的更改也应该传播到 User 对象一样?

【问题讨论】:

    标签: iphone cocoa-touch core-data nsfetchedresultscontroller nsmanagedobjectcontext


    【解决方案1】:
    [myFetchedResultsController performFetch:&error];
    

    但是你为什么要这样做呢?它应该只在有新数据要获取时重新加载。如果有新数据,那么保存NSManagedObjectContext 是正确的操作。

    你的基本目标是什么?

    【讨论】:

    • 日志对象中有个新数据可用。日志对象与用户屏幕中的用户对象一起汇总。但是,单独更新 Log 对象不会触发获取的 User 对象的刷新。
    • 在这种情况下,如果您在相关的视图控制器中,调用 -reloadData 就足够了,否则我会让相关的视图控制器监听 NSManagedObjectContextDidSaveNotification 并刷新表格(或甚至根据需要将其缩小到特定的单元格)。您最初的解决方案感觉有风险。
    猜你喜欢
    • 2021-01-10
    • 2016-03-12
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 2016-08-06
    • 2016-10-13
    • 1970-01-01
    • 2014-01-10
    相关资源
    最近更新 更多