1

私の現在のアプリでは、NSFetchedResultController を実装する UITableView を使用して REST API からデータをインポートするために、現在 MagicalRecord を使用しています。

問題が発生するケース:

  1. [NSPredicate predicateWithFormat:@"friend_type != %i", FacebookFriend]; という述語を使用して NSFetchedResultController をセットアップします。
  2. まず、friend_type FacebookFriend (enum から) を取得する Facebook から友達を取得します。
  3. REST API 呼び出しで Facebook ID の解決を試みます。
  4. ユーザーが解決された場合、friend_type を ResolvedFacebookFriend (enum から) に変更します。
  5. 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 に行を挿入します。

4

0 に答える 0