0

addObjectsFromArray を使用して、2 つの配列を「連結」(いわば) しようとしています。コードの概要は次のとおりです。

NSArray *fixed = [NSArray arrayWithArray:timeline2];
NSLog(@"Made the temp successfully.Contents: %@", fixed);

[arrayOfNewsItems addObjectsFromArray:fixed];

Log ステートメントは、"fixed" 配列と "timeline2" 配列に有効なデータがあることを確認でき、プログラムの前半で、"arrayOfNewsItems" 配列にデータが存在することを確認しました。

addObjects.. の試行後に受け取る例外は次のとおりです。

'NSInternalInconsistencyException', reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'

arrayOfNewsItems は NSMutableArray です。それは財産です。実際には、次のように宣言されています。

@property (nonatomic) NSMutableArray * arrayOfNewsItems;

おそらくそれは「非アトミック」ステートメントですか?これらもよくわかりません。

私が考えることができる唯一のことは、各配列の配列要素が異なるオブジェクト型を持っているということです。むしろ、それらはそれぞれ辞書オブジェクトの配列ですが、オブジェクト自体はキーと値のペアの異なるリストで構成されています。例えば:

配列要素 1 には以下が含まれる場合があります。

(key)                 (value)
name                   Joe
title                  Mr.

また、配列要素 2 には以下が含まれる場合があります。

(key)                 (value)
phone                 555-1263
shoeSize              2

さて、他の言語では、これを試すことはありませんが、以前の投稿で、これを行っても問題ないと言われたことは確かです. 私は、objective-c がそれらを (id) として保存することを理解しています。したがって、質問は次のとおりです。

  • これは本当ですか?
  • もしそうなら、私は何を逃したのですか?

最終的な配列ですべてのフィールド名を同じにする関数のコーディングを開始する前に、これについて確実な答えを得たいと思います。

私が得ることができるすべての助けに感謝します!ありがとう。

4

1 に答える 1

1

これは、 の不変インスタンスがあるmutating method sent to immutable object
ことを意味します。NSArray

と定義されていてもNSMutableArray、実際に 1 であるとは限りません。のような変更メソッドを呼び出そうとしたときの警告のみを削除します-addObjectsFromArray:

配列を作成するときは、alloc/init を変更可能なバージョンに送信する必要があります。

self.arrayOfNewsItems = [[[NSMutableArray alloc] init] autorelease];
于 2012-04-18T19:00:31.063 に答える