0

viewDidLoadの場合、配列の最初の 5 つの項目を Web サービスからロードし、それらNSMutableArrayを私のものに置きます。また、このビューには、Web サービスのコンテンツをUITableViewController含むアイテムが表示されます。NSMutableArrayの最後の項目までスクロールすると、UITableView次の 5 つの項目が Web サービスから読み込まれ、それらが my に追加されNSMutableArray、10 項目すべてを表示するためにテーブル データが再読み込みされます。

問題は、既存NSMutableArrayの 5 つの新しいオブジェクトを Web サービスから追加しようとすると、プログラムが次のメッセージでクラッシュすることです。Exception: -[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object

にアクセスする方法はNSMutableArray次 のcellForRowAtIndexPath:とおりです。

cell.textLabel.text = [[self.myMutableArray objectAtIndex:indexPath.row]objectForKey:@"name"];

それが何であるかについて何か考えはありますか?

4

1 に答える 1

3

まず、コンパイラ出力で警告を探します。NSArrayNSMutableArray変数に割り当てている可能性があります。これにより、多くの場合、警告が生成されます。ビルドには警告が含まれていないはずです。これは、ObjC コードにとって重要です (「エラー」と考えられる多くのことは、ObjC では単なる警告です)。警告を無視すると、多くの問題が発生します。

何かが にキャストされた場合、警告を作成せずにこの状況が発生する可能性がありますid。たとえば、配列または辞書から " NSMutableArray" (実際にはNSArray) をフェッチする場合、型の不一致に関する警告は表示されません。これらの状況を探してください。基本的に、割り当てる各ポイントを監査myMutableArrayし、実際に可変配列を割り当てていることを確認します。

于 2012-06-21T14:52:48.000 に答える