2012-01-25 22 views
0

このサイトと他のサイトの両方で配列をコピーすることについては何度も質問していますが、NSMutableArrayをプロパティにコピーできません

Iが宣言され、合成したプロパティと呼ばarrXTurbulenceValues:

@property (weak, nonatomic) NSArray *arrXTurbulenceValues; 

@synthesize arrXTurbulenceValues; 

私は()メソッドのviewDidLoadでアレイを初期化しています:一部の処理値である方法で起こる

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

NSMutableArrayに格納されます。その処理の終わりに、私はこのコードを経由して、NSArrayのプロパティにNSMutableArrayのディープコピーしようとしています:

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

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

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

NSStringはNSCopyingに応答しますか?それは私が正しくドキュメントを読んでいる場合に表示されます。

Objective Cに結合されたiOS環境は悪夢です。私は決して扱いにくい何かを見たことがない。ああ。

答えて

2

あなたはARCで実行されていると仮定すると、 "強い" に "弱い" を変更してみてください:

@property (weak, nonatomic) NSArray *arrXTurbulenceValues; 

へ:

@property (strong, nonatomic) NSArray *arrXTurbulenceValues; 

あなた-viewDidLoad方法の終わりには、そこに配列へのより強力な参照ではなく、割り当てを解除しています(弱い参照をすべて除外しています)。

+0

OMG、ありがとうございました!私はその弱い/強い角度を考慮していなかった。私は私の髪を裂く準備ができていた。本当にありがとう、ありがとう。 – NightStalker

+1

一般に、変数には「強」を使用します。強力な参照サイクルを避けるために、通常「バックポインタ」に「弱い」が使用されます。オブジェクトのオーナーシップグラフでは、一般に、その下位のオブジェクトを所有するオブジェクトが最上位にあります(強い)。他の方向に進む必要があるときは、弱い参照を使用します。 (例のオーナーシップグラフ:https://github.com/musictheory/SwiffCore/wiki/classes.png、実線の矢印は強い参照、中空の矢印は弱い)。 – iccir

+0

@NightStalker、これがあなたの質問に答えたなら、それを受け入れるべきです。 – paxdiablo

関連する問題