2012年1月20日金曜日

unrecognized selector sent to instance

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

コメントを投稿

Related Posts Plugin for WordPress, Blogger...