在我当前的应用程序中,我目前正在使用 MagicalRecord 从 REST API 导入数据,其中 UITableView 实现了 NSFetchedResultController。
出现问题的案例:
- 我使用如下谓词设置了一个 NSFetchedResultController: [NSPredicate predicateWithFormat:@"friend_type != %i", FacebookFriend];
- 首先,我从 Facebook 检索获得friend_type FacebookFriend(来自枚举)的朋友。
- 我将尝试通过 REST API 调用来解析他们的 Facebook ID。
- 如果用户已解决,我会将他们的friend_type 更改为 ResolvedFacebookFriend(来自枚举)
- NSFetchedResultController 不会收到这些更改的通知。
请参阅以下代码以初始化我的 NSFetchedResultController 并从数据源导入。
通过 MagicalRecord 库创建 NSFetchedResultController
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"friend_type != %i", FacebookFriend];
self.friendsResultController = [Friend fetchAllGroupedBy:@"friend_type" withPredicate:predicate sortedBy:@"friend_type,user.nickname" ascending:YES delegate:self];
在对 Facebook 进行第一次 API 调用后,通过 MagicalRecord 库创建 Friend 实体:
Friend* userFriend = [Friend createEntity];
userFriend.friend_type = [NSNumber numberWithInteger:FacebookFriend];
如果我的本地 REST API 解决了这些 FacebookFriends,则更新它们:
Friend* userFriend = [Friend ....] // Correct friend was fetched
userFriend.friend_type = [NSNumber numberWithInteger:ResolvedFacebookFriend];
我该怎么做才能让 NSFetchedResultController 收到这些更改的通知?如果不是,这是 Apple 的错误还是我应该以不同的方式设置我的 CoreData?
编辑 - 2013 年 11 月 14 日
我发现对象是用friend_type ResolvedFacebookFriend 保存的。并像这样再次保存它:
userFriend.friend_type = userFriend.friend_type;
// Save the context again
NSFetchedResultController 突然看到变化并在 UITableView 中插入一行。