0

このサイトと他のサイトの両方で配列のコピーに関する無数の質問を読みましたが、私が抱えている問題に直接対処するものはありません。

arrXTurbulenceValues というプロパティを宣言して合成しました。

@property (weak, nonatomic) NSArray *arrXTurbulenceValues;

@synthesize arrXTurbulenceValues;

ViewDidLoad() メソッドで配列を初期化しています。

self.arrXTurbulenceValues = [[NSArray alloc] init];

一部の処理は、値が NSMutableArray に格納されるメソッドで発生します。その処理の最後に、次のコードを使用して、NSMutableArray を NSArray プロパティにディープ コピーしようとしています。

                self.arrXTurbulenceValues = [[NSMutableArray alloc] initWithArray:tempXvalues copyItems:YES];

コピーは失敗し、self.arrXTurbulenceValues は nil のままです。コピーしようとしている tempXvalues 配列に含まれる 1900 以上の NSString オブジェクトがあります。

私は何を間違っていますか?ViewDidLoad() で初期化せずに & を使用してコードをコピーしようとしました。また、プロパティを NSArray と NSMutableArray の両方として構成しようとしました。

NSString は NSCopying に応答しますか? ドキュメントを正しく読んでいれば、そう思われます。

Objective C に結合された iOS 環境は悪夢です。あれほど扱いにくいものは見たことがありません。うーん。

4

1 に答える 1

2

ARC で実行していると仮定して、「弱い」を「強い」に変更してみてください。

@property (weak, nonatomic) NSArray *arrXTurbulenceValues;

の中へ:

@property (strong, nonatomic) NSArray *arrXTurbulenceValues;

-viewDidLoad メソッドの最後に、配列への強い参照がなくなり、割り当てが解除されます (これにより、配列へのすべての弱い参照も削除されます)。

于 2012-01-25T04:07:26.750 に答える