0

私はPythonの経験が何よりも多いので、可変配列と不変配列およびdictを操作するのは少し奇妙です。Xcode 4.5が追加したリテラル構文を本当に楽しんでいますが、簡単な混乱を行うと、次のような状況に遭遇します。

NSArray *myArray = [@[/*array objects here*/] mutableCopy];
[myArray addObject: @/*an object goes here*/];

コンパイラは、「myArrayがaddObjectに応答しない可能性があります」という警告を表示します。

コードはコンパイルされ、addObjectは正常に機能します。オブジェクトをNSLogして、myArrayに存在することを確認できますが、この警告の性質を完全には理解していません。この状況では、mutableCopyはNSMutableArrayを返しませんか?単にNSMutableArrayを使用し、リテラル構文を(過剰に)使用しようとしない方が適切ですか?

また、これはばかげた警告なので、無視して続行できますか?それは...最悪の場合は怠惰であり、将来的にはシェナニガンへの扉を開くだけかもしれません。

4

2 に答える 2

2

NSMutableArray変数をではなくとして宣言する必要がありますNSArrayaddObject:でのみ使用できる方法ですNSMutableArray

編集:そこには不要なものもあるようです@。コードは次のようになります。

NSMutableArray *mutable = [@[a, b, c] mutableCopy];
[mutable addObject:d];
于 2012-10-17T18:24:09.203 に答える
0

この状況で、mutableCopy は NSMutableArray を返さないのですか?

します。そのため、戻り値を NSArray ではなく NSMutableArray に割り当てる必要があります。

NSMutableArray *myArray = [@[/*array objects here*/] mutableCopy];

コンパイラをシャットダウンする必要があります。

于 2012-10-17T18:24:46.330 に答える