1

設定:

ViewControllerMyArrayからのオブジェクトのを保持しますPersonClassPersonClassとの2つのプロパティがnameありageます。

問題:

これを行うための適切な方法nameで、最初のオブジェクトからプロパティを読み取りたい場合はどうすればよいですか?MyArray

このようなインスタンスを一時的に作成する必要がありますPersonClassか?

PersonClass *tmp = [PersonClass alloc] init];
tmp = [MyArray objectAtIndex:0];

NSLog(@"%@", tmp.name);

propertiesまたは、ののobjectsを直接参照できMyArrayますか?

このようなもの:

 NSLog(@"%@", [self.contactsArray objectAtIndex:0].name); // not working
4

5 に答える 5

6

使用することを強くお勧めします

[(PersonClass *)[MyArray objectAtIndex:0] name]

一見きれいに見えるのではなく、面倒な形

[[MyArray objectAtIndex:0] name]

これには2つの理由があります。まず第一に、それは読者にとってどのオブジェクトで何が呼び出されるかを明示します。次に、コンパイラーにとっては明示的です。2つのメソッドが同じ名前を共有していても、戻り値が異なると、問題が発生する可能性があります。Cocoa WithLoveのMattGallagherは、この問題について優れた説明をしています。

于 2012-08-15T13:08:08.727 に答える
0

あなたはこれを行うことができます

PersonClass *tmp = (PersonClass *) [MyArray objectAtIndex:0];
NSLog(@"%@",tmp.name);

または、これを1行にまとめることもできます。

NSLog(@"%@",((PersonClass *)[MyArray objectatIndex:0]).name);

動作しない理由 NSLog(@"%@", [self.contactsArray objectAtIndex:0].name);は、どのタイプのオブジェクトがにあるかをコンパイラーに通知していないためです[self.contactsArray objectAtIndex:0]。配列内のオブジェクトのタイプがわからないため、nameプロパティがあることを知る方法はありません。

于 2012-08-15T12:55:33.090 に答える
0
((PersonClass *)[MyArray objectAtIndex:0]).name

あるいは単に[[MyArray objectAtIndex:0] name]

于 2012-08-15T12:56:22.090 に答える
0

このようなPersonClassのインスタンスを一時的に作成する必要がありますか?

PersonClass *tmp = [PersonClass alloc] init];
tmp = [MyArray objectAtIndex:0];

NSLog(@"%@", tmp.name);

いいえ、使用するだけです

PersonClass *tmp = (PersonClass *)[myArray objectAtIndex:0];
NSLog(@"%@", tmp.name);

myArrayから取得しているオブジェクトは、配列に追加される前にすでに割り当てられ、初期化されている(またはそうあるべきです!)。配列内のものはオブジェクトへのポインタです。それはあなたが回っているものです。(PersonClass *)NSArrayはNSObjectを格納するだけなので、そこにあるオブジェクトのタイプ(キャストは)を指定する必要があります。

このように一行でそれを行うこともできます

((PersonClass *)[myArray objectAtIndex:0]).name;

于 2012-08-15T12:57:33.793 に答える
0

タイプを表示する必要がある場合は、次のようにタイプを導入します。

PersonClass * person = [array objectAtIndex:0];

私は読みやすさのためにこれをかなり定期的に行っています、そして含まれているファイルの宣言はそうでなければ物事を壊す可能性があるからです。

値からobjc変数を割り当てる場合、キャストは必要ないことに注意してくださいid

PersonClassのインスタンスを一時的に作成する必要がありますか?

いいえ。作成したプログラムは、使用されない一時的なものを作成します。

于 2012-08-15T13:01:45.347 に答える