2016-06-20 8 views
0

NSArray型のプロパティを使用しています。次に、NSArrayの値を初期化または設定しようとしています。私がの略語をに割り当てると、出力が得られます。しかし、私がという長い初期化スタイルで試しているとき、結果が得られません。後者にとって正しい方法は何でしょうか?ここでNSStringのNSArrayを初期化する方法は?

は、コードスニペットです:

@property NSArray * moods; 

//shorthand assignment 
[email protected][@"Happy",@"Sad"]; 
NSLog(@"Hello %@",[self moods]); 

これが機能しています。しかし、私が試したときに:

//long initialization style 
[[self moods]initWithObjects:@"Happy",@"Sad", nil]; 
NSLog(@"Hello %@",[self moods]); 

これは同じ方法ではありません。私に何かを提案してください。

+0

のNSLogあなたはどちらの場合にもなっているとは何ですか?違いは見たことがありますか? –

+0

@TejaNandamuriこの場合、結果は空白になります。 '[[self moods] initWithObjects:@" Happy "、@" Sad "、nil];' – nayem

+0

最初のスニペットの構文は「オブジェクトリテラル」と呼ばれます。 2番目の形式は有効ではありません。他の答えで説明されているように、あなたは何かをself.moodsに割り当てる必要があります。 –

答えて

3

第二の例は次のようになります。

self.moods = [[NSArray alloc] initWithObjects:@"Happy",@"Sad", nil]; 

allocは常に、実際にオブジェクトにメモリを割り当てるために初期化する前に呼び出さなければなりません。 [self moods]は何かをself.moodsに割り当てるまでnilを返します。

編集:

あなたが本当に何らかの理由で不動産ドット表記の構文によって割り当てを回避したい場合は、代わりにsetterメソッドを使用することができます。

[self setMoods: [[NSArray alloc] initWithObjects:@"Happy",@"Sad", nil]];

+0

私は 'self.moods'というこのobject.propertyスタイルを取り除こうとしていました。 "[[気分]]スタイル:( – nayem

+0

@nayemなぜプロパティドット表記法をやめようとしているのですか?これは客観的な - cの標準的な慣習です。 –

+0

私はあなたに同意しますが、このドット表記を取り除く方法はありません。基本的に私はこのドット表記のファンではありません:( – nayem

0

上記の答えは完全に正しいです。私は完全性のためにコメントを追加するのが大好きですが、私はすべてのオプションを与えるために余分な答えを追加することはできません。

あなたがいつもallocとinitの順序と混同してしまう場合、便利な初期化子を使うことができます。または、より洗練されたコードを使用したい場合。

self.moods = [NSArray arrayWithObjects:@"Happy",@"Sad", nil]; 

しかし、上記の答えは完璧です。私は個人的には明示的なalloc initパターンを好みます。

+0

基本的に私はプロパティの設定のためのドット表記を取り除こうとしていた – nayem

+0

実際に私はあなたの質問を読んで、私はそれを試してXcodeをインストールしていた、私は完全にいくつかの時間前と私の思い出Objective-Cはゆっくりと遠ざかります。しかし、パトリックの答えを見て、元の答えを完全に混乱させました。ごめんなさい :) – andre

0

ドットなしのちょうどいくつかの代替的なアプローチ...;)

[self setMoods:@[@"Happy", @"Sad"]; 
関連する問題