Missing proxy for identifier IBFilesOwnerエラーで落ちる原因と対処法
2187 ワード
現象
- UITableViewCell に、 reloadRowsAtIndexPaths:withRowAnimation: でテーブルセルのリロードをかけるとアプリが落ちる。
- アニメーションを UITableViewRowAnimationNone にしてもダメ。
エラーメッセージ
Missing proxy for identifier IBFilesOwner
原因
- 画面の更新系の処理をBackgroundで実行しようとしていたことが原因。
- 自分は、通信しその結果をテーブルへ反映させるという処理を、すべてBackgroundスレッドで実行するコードを書いていたのが原因でした。
解法法
- メインスレッドで実行する
サンプルコード
dispatch_async(dispatch_get_main_queue(), ^{
[self reloadRowsAtIndexPaths:@[indexPath]
withRowAnimation:UITableViewRowAnimationFade];
}
Missing proxy for identifier IBFilesOwner
原因
- 画面の更新系の処理をBackgroundで実行しようとしていたことが原因。
- 自分は、通信しその結果をテーブルへ反映させるという処理を、すべてBackgroundスレッドで実行するコードを書いていたのが原因でした。
解法法
- メインスレッドで実行する
サンプルコード
dispatch_async(dispatch_get_main_queue(), ^{
[self reloadRowsAtIndexPaths:@[indexPath]
withRowAnimation:UITableViewRowAnimationFade];
}
- メインスレッドで実行する
サンプルコード
dispatch_async(dispatch_get_main_queue(), ^{
[self reloadRowsAtIndexPaths:@[indexPath]
withRowAnimation:UITableViewRowAnimationFade];
}
dispatch_async(dispatch_get_main_queue(), ^{
[self reloadRowsAtIndexPaths:@[indexPath]
withRowAnimation:UITableViewRowAnimationFade];
}
これでエラーは解消する。
ただ、実際にはreloadRowsAtIndexPaths:だけでなくメソッド全体をメインスレッドで呼び出すように変更しました。
「データの取得等をしているクラス」と「テーブルクラス」が別クラスなので、前者は極力バックグラウンドで実行、後者はメインスレッドで実行される前提でコーディング。
前者から後者へのメソッド呼び出し時にメインスレッドへ戻す、という整理です。
メモ
- NotificationCenter経由で通知しても、通知元がバックグラウンドスレッドだったら通知を受け取る側もバックグラウンドで動くんですね。知りませんでした。
- もっといい方法や気になる点があれば、気軽にコメントください。
参考リンク
objective c - Missing proxy for identifier IBFilesOwner - Stack Overflow
http://stackoverflow.com/questions/10937103/missing-proxy-for-identifier-ibfilesowner
Author And Source
この問題について(Missing proxy for identifier IBFilesOwnerエラーで落ちる原因と対処法), 我々は、より多くの情報をここで見つけました https://qiita.com/ohkawa/items/8b3eee43ce6725bb00b5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .