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 件のコメント:
コメントを投稿