iOS9でのNSFetchedResultsContollerDelegateの挙動
公開日:
:
最終更新日:2016/04/12
Tips iOS9, NSFetchedResultsContollerDelegate, 不具合
ハマったので短いながらメモしたいと思います。
NSFetchedResultsContollerDelegateで、フェッチしたNSManagedObjectの更新を検出するためにNSFetchedResultsChangeUpdateを捕まえるため、controller:didChangeObject:atIndexPath:forChangeType:newIndexPathのメソッドを使って、メソッド内でNSFetchedResultsChangeTypeによるswitch文を組んでいたのですが、switchに来れども処理はされず、という状況で困っていました。
よくよくデバッガでNSFetchedResultsChangeTypeを見たら、本来NSFetcedResultsChangeUpdateでくるべきtypeがNSFetcedResultsChangeMoveで来ている!!!
これはひどいバグです・・・(参考サイトの書き込みを見た限りでは、iOS8では起こらない模様)
このメソッドにtype == NSFetchedResultsChangeMoveで来た時に、本当のmoveかそうでないかを見分けるには、indexPathとnewIndexPathを見ればよいようです。
Updateの場合newIndexPath == nilとなるので、これで見分ければよい、ということな模様。
前述のとおり、iOS9以外では(そしてiOS9でも、今後FIXされれば)通常通りなので、それは意識してコードを組む必要があるようです。
参考サイト
関連記事
-
-
UITableViewのセルセパレータが画像の下部分だけ切れる場合の対応
iOS7のUItableViewCellだと、UITableView.imageViewに画
-
-
plistファイルに色を入れる
plistファイル中にUIColorを入れたい!という場合。普通RGBAの値を数値で入れるとかするけ
-
-
実機テストしたときのデータを取り出す
Xcodeでコンパイルして実機テストしている場合に、テストデータを実機から取り出す方法です。 以下
-
-
コードでiPhone6 Plusを識別する簡単な方法
表題の通り、コードでiPhone6 Plusを識別する簡単な方法です。 iPhone6 Plu
-
-
UITableViewCellのロングタップ
UITableViewCellをロングタップしたときに、タップされたセルを認識しつつメニューを出した
-
-
NSStringのフォーマット書式
Appleのページになく、IEEEのprintfフォーマットのページにあるので、C言語と親しくしてな
-
-
GoogleスプレッドシートからCSVにエクスポートしたデータを得る方法
情報がない中さんざ苦労しましたが、Googleスプレッドシート(の最初のシート)をCSVとしてエクス
-
-
iOSシミュレータの帯域制限をテストする
iOSシミュレータで通信帯域制限をテストしたいと思ったんですが、Xcode8からXcode7.xとは
-
-
メソッドの呼び出し元を調べる
特定のメソッドに関して、そのメソッドをコールしているメソッド群を調べるための手順。 (1)調べたい
