私の現在のアプリでは、NSFetchedResultController を実装する UITableView を使用して REST API からデータをインポートするために、現在 MagicalRecord を使用しています。
問題が発生するケース:
- [NSPredicate predicateWithFormat:@"friend_type != %i", FacebookFriend]; という述語を使用して NSFetchedResultController をセットアップします。
- まず、friend_type FacebookFriend (enum から) を取得する Facebook から友達を取得します。
- REST API 呼び出しで Facebook ID の解決を試みます。
- ユーザーが解決された場合、friend_type を ResolvedFacebookFriend (enum から) に変更します。
- 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 に行を挿入します。