iphoneアプリの開発で、unrecognized selector sent to instanceエラーが発生するケースがあります。
多くの場合、オブジェクトの過度なreleaseが原因です。
というわけで、以下に気をつけるパターンを示します。
リストデータのオブジェクトの開放
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"%s", __func__);
NSInteger row = [indexPath row];
MemoryModel* obj = [self.list objectAtIndex:row];
MemoryDetailViewController* controller = [[MemoryDetailViewController alloc] initWithStyle:UITableViewStyleGrouped];
controller.memoryModel = obj;
[obj release], obj = nil;
[self.navigationController pushViewController:controller animated:YES];
[controller release], controller = nil;
}
上記のコードでは、インスタンス変数に格納したリストオブジェクト中からモデルデータを取り出し、詳細データ画面遷移後に開放する前にオブジェクトを開放しています。
このようなケースでオブジェクトを開放してしまうと、navigationで戻ってもう一度同じ列を選択すると、エラーが発生します。
// [obj release], obj = nil;
上記のようなリストから詳細画面への遷移は、オブジェクトを開放しないようにするのが正解です。
0 件のコメント:
コメントを投稿