3

NSObjectサブクラスのパブリックインターフェイスを次のように定義しています。

@interface MyObject : NSObject
{
    NSString *_key1;
    NSString *_key2;
    NSString *_key3;
}
- (id)initWithDict:(NSDictionary *)dict;
@end

initWithDict:メソッドを実装して、次のように定義されたNSDictionaryを渡すことができるようにするためのトリックはありますか?

{"key1": "value1"、 "key2": "value2"、 "key3": "value3"}

そして、initメソッドは、関連するインスタンス変数を対応する「値」で設定できますか?

4

3 に答える 3

15

KVCを使用する必要があります。

NSDictionary *dict = @{@"key1" : @"value1", @"key2" : @"value2", @"key3" : @"value3"};
for (NSString *key in [dict allKeys]) {
   [self setValue:dict[key] forKey:key];
}
于 2012-08-24T16:29:27.630 に答える
1

DrummerBの回答に加えて、以下のようなネストされたオブジェクトがある場合、

@interface InnerObject : NSObject
{
    NSString *innerKey1;
}
@interface MyObject : NSObject
{
    NSString *key1;
    NSString *key2;
    NSString *key3;
    InnerObject *innerObj; 
}

以下の方法でも、iVarinnerKey1に値を設定できます。

MyObject *obj = [[MyObject alloc]init];
obj.innerObj = [[InnerObject alloc]init];
[obj setValue:yourValue forKeyPath:innerObj.innerKey1];
于 2012-08-24T16:41:50.200 に答える
1

次のように、ディクショナリからインスタンス変数/プロパティを初期化することもできます。

[self setValuesForKeysWithDictionary:dictionary];

setValuesForKeysWithDictionaryに関する公式のAppleドキュメントは次のとおりです。

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueCoding_Protocol/#//apple_ref/occ/instm/NSObject/setValuesForKeysWithDictionary

于 2015-11-05T18:43:22.097 に答える