*

iOS9でのNSFetchedResultsContollerDelegateの挙動

公開日: : 最終更新日:2016/04/12 Tips , ,

ハマったので短いながらメモしたいと思います。
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されれば)通常通りなので、それは意識してコードを組む必要があるようです。

参考サイト

Apple Developer Forums : iOS 9.1 NSFetchedResultsController NSFetchedResultsChangeUpdate is not called

関連記事

アプリ内で自動スリープの設定を無効化する

「設定」アプリ内で設定したスリープ時間設定を無効にするためのコード。 アプリがバックグラウンドにな

記事を読む

UIActionSheetの文字がブレて多重表示される

UIActionsheetを使っていて、iOS7/iPadの組み合わせで起こる不具合らしき挙動が起こ

記事を読む

Realmで==ができなかった

最近Realm Swiftを使ってて、引っかかったところがあるのでメモ。 Realmのオブジェクト

記事を読む

WSCoachMarksViewをSwiftで使う場合の手順

Objective-Cで記述されてるライブラリ全般に当てはまることもあるんですが、個別でやることも含

記事を読む

iOS8のシミュレーターでLocalizationのテストをする

iOS8.1のシミュレーターでは、従前できていたシミュレーター内での「設定」(Setting)からの

記事を読む

GoogleスプレッドシートからCSVにエクスポートしたデータを得る方法

情報がない中さんざ苦労しましたが、Googleスプレッドシート(の最初のシート)をCSVとしてエクス

記事を読む

警告を無視する

HokusaiというライブラリをObj-Cのアプリで使うために奮闘してるのですが(これはこれで別記事

記事を読む

plistファイルに色を入れる

plistファイル中にUIColorを入れたい!という場合。普通RGBAの値を数値で入れるとかするけ

記事を読む

NSDictionary/NSMutableDictionaryの”valueForKey:”と”objectForKey:”の違い

表題にある通り、似ていて混同する(そして、取り違えても「たいてい」普通に動作する)NSDiction

記事を読む

UITableViewのセクションヘッダをStoryboardで作る時の参考

UITableViewのセクションヘッダをカスタムして作る際に、セルと同様にプロトタイピングするため

記事を読む

Xcode10からのimage literal / color literalの指定方法

アセットにあるUIImageの直接指定が可能なImage litera

Xcode11でのバージョン番号の取得方法

Xcode11になってバージョン番号をスクリプトから得て自動で更新する

GoogleスプレッドシートからCSVにエクスポートしたデータを得る方法

情報がない中さんざ苦労しましたが、Googleスプレッドシート(の最初

画面回転をしたあとに、UITextViewの先頭を表示する

回転によりサイズが可変するUITextViewで、縦向き(ポートレイト

NXDrawKitを導入してみる

ACEDrawingViewがObj-Cで書かれていて、いまいちメンテ

→もっと見る

    PAGE TOP ↑