2012-02-10 8 views
1

テーブルビューで動的セルを追加するために使用しているコードを見てください。ランタイムを追加してください。私のテーブルビューを選択したとき、私はこのメソッドを呼び出しました。キャッチされない例外により 'NSInvalidArgumentException'、理由に *アプリを終了:テーブルビューでダイナミックセルを追加する際に問題がありますか?

- (void) allServersFound 
{ 
    // called from delegate when bonjourservices has listings of machines: 
    NSArray *newPosts = [[NSArray alloc]initWithObjects:@"A", nil]; // NSArray of machine names; 

NSMutableArray *tempArray = [[NSMutableArray alloc] initWithObjects: @"A",@"B",@"C",@"D", nil]; 

int i = 0; 
for (NSArray *count in newPosts) 
{ 
    [tempArray addObject:[NSIndexPath indexPathForRow:i++ inSection:0]]; 
} 

[[self tblHome] beginUpdates]; 
[[self tblHome] insertRowsAtIndexPaths:tempArray withRowAnimation:UITableViewRowAnimationNone]; 
[[self tblHome] endUpdates]; 

[tempArray release]; 
} 

しかし、これは実行時例外次のように私を与える「 - [NSIndexPath _fastCStringContents:]:認識されていないセレクタはインスタンスに送信0x4e0e130

答えて

1

まず、あなたがこのような文字列を使用してtempArrayを初期化します。

NSMutableArray *tempArray = [[NSMutableArray alloc] initWithObjects: @"A",@"B",@"C",@"D", nil]; 

次にあなたがindexPaths Lを追加IKEこの:

[tempArray addObject:[NSIndexPath indexPathForRow:i++ inSection:0]]; 

ので、あなたがinsertRowsAtIndexPathsメソッドに渡す配列は、文字列とindexPathsオブジェクトの両方が含まれています。私はこれが例外の理由だと思う。

0

tmparrayにはNSStringの値とIndexPathが含まれていますので、最初にNSStringを削除してみてください。 あなたtempArrayNSStringNSIndexPathオブジェクトの混合物を含む、他の人が指摘したようにライン

NSMutableArray *tempArray = [[NSMutableArray alloc] initWithObjects:nil]; 
1

でライン

NSMutableArray *tempArray = [[NSMutableArray alloc] initWithObjects: @"A",@"B",@"C",@"D", nil]; 

を交換してみてください。これは他のことをする前に対処する必要がある最も明白なことです。そのために[NSMutableArray array]クラスメソッドを使用できます(オートレリースされているため、メソッドの最後に[tempArray release]への呼び出しを削除する必要があります)。

あまり明白なことは、そうでなければ、それほど明白な場所で別の例外になるだろう、あなたはinsertRowsAtIndexPathsを呼び出す前に、あなたのUITableView モデル更新されなければならないということです。

関連する問題