0

初心者の質問:実行時にNSStringsまたはcharの代わりにコマンド、プロパティ、またはメソッドを使用できますか?

私がこのようなことをしたとしましょう:

//these are the names of my properties of an NSObject I created
char theChangingProperty[17][18] = {"name", "title", "number", "property4", "property5", "property6", "property7", "property8", "property9", "property10", "property11", "property12", "property13", "property14", "property15", "property16", "property17"};

(PS私はオブジェクトプロパティを取得するより良い実際のobjective-cの方法があることを知っています、私はObjective-CでこのGet a object property listを含む投稿を見つけました)

とにかく、リストを繰り返し処理してプロパティ名を変更するにはどうすればよいですか?ループ中の実行時にドット表記を使用しているとしましょう...オブジェクトの17(または100!)の異なるプロパティをすべて、次のように他の配列の値に一度に設定したい場合:

for (int t=1; t<17; t++) {
    myObject.theChangingProperty[t] = valueOfAnotherArray[t];
}

私はobjective-cが「theChangingProperty」と呼ばれる実際のプロパティを探すことを知っています。しかし、ループを繰り返すたびに変化する実際のプロパティ(名前、タイトル、番号、property4など)を吐き出す配列にしたいと思います。

初心者の質問に答えてくれてありがとう:)

4

3 に答える 3

3

必要なのはKey-Valueコーディングと呼ばれます。具体的には、書き込もうとしている行はです[myObject setValue:valueOfAnotherArray[t] forKey:[NSString stringWithUTF8String:theChangingProperty[t]]]

于 2010-11-15T04:50:03.450 に答える
2

ドット表記は実行時ではなくコンパイル時に解決されるため、この目的で使用することはできません。これにはセッター名を使用する必要があります。つまり、setTheChangingProperty:performSelector:として渡す適切なオブジェクトを使用します。

単純なケースでは、これはおそらく問題なく機能することに注意してください。ただし、誰かが入って次のようなことをした可能性があります。

@property (nonatomic, retain, setter=fooBarBaz:) id blurgle;

setBlurgle:上記の場合、あなたは単純に正しいセッターであると想定することはできません。

于 2010-11-15T04:12:37.493 に答える
1

setValue:forKey:を使用できますが、プロパティキーはC文字列ではなくNSStringである必要があるため、配列を宣言してください。

NSString* theChangingProperty[17] = { @"name", ....

次に、次のように記述します。

for (int t = 0; t < 17; t++) 
{
    [myObject setValue: valueOfAnotherArray[t] forKey: theChangingProperty[t]];
}

または、performSelector:withObject:を使用できますが、配列にはセレクターが含まれている必要があります

SEL theChangingProperty[17] = { @selector(setName:), ....

for (int t = 0; t < 17; t++) 
{
    [myObject performSelector: theChangingProperty[t] withObject: valueOfAnotherArray[t]];
}
于 2010-11-15T10:15:19.923 に答える