基本
値の取得
NSNumber *num = [hoge valueForKey:poi];
値のセット
[hoge setValue:[NSNumber numberWithBool:YES] forKey:@"poi"];
注意
floatやIntはNSNumber等にラップされる(ボクシング)
キーについて
[hoge valueForKey:poi];
において、
- poiもしくはisPoiという名前のゲッターメソッドを探す
- なければ_poiかpoiというインスタンス変数を探す
ポイントはゲッターメソッドがない値も取得、代入できる事。
オブジェクトのプロパティに入っているオブジェクトのプロパティを取得する。 valueForKeyPath:
[pp3 valueForKeyPath:@"pokopoko.po"]
NSArray中のNSDictionaryのあるキーを持っていたらそれを集めてきて配列を作れ
NSArray *resArr = [arr mutableArrayValueForKey:@"hoge"];
もしくは
NSArray *resArr = [arr valueForKey:@"hoge"];
NDinctionaryでなくともオブジェクトの属性ならすべてこれでいける。
サンプルコード
@interface Pokopoko : NSObject
@property (nonatomic, assign) BOOL oppp;
@property (nonatomic, copy) NSString *po;
@property (nonatomic, retain) Pokopoko *Pokopoko;
@end
@implementation Pokopoko
@end
@implementation KVCTest
- (void)test
{
Pokopoko *pp = [[[Pokopoko alloc] init] autorelease];
pp.oppp = YES;
pp.po = @"OOOO";
Pokopoko *pp2 = [[[Pokopoko alloc] init] autorelease];
pp2.oppp = NO;
pp2.po = nil;
Pokopoko *poInternal = [[[Pokopoko alloc] init] autorelease];
poInternal.oppp = NO;
poInternal.po = @"pqpqpqp";
Pokopoko *pp3 = [[[Pokopoko alloc] init] autorelease];
pp3.oppp = YES;
pp3.Pokopoko = poInternal;
NSMutableArray *arr = [NSMutableArray array];
[arr addObject:pp];
[arr addObject:pp2];
[arr addObject:pp3];
NSLog(@"%@", [arr description]);
NSLog(@"oppp:%@",[arr mutableArrayValueForKey:@"oppp"]);
NSLog(@"po:%@",[arr mutableArrayValueForKey:@"po"]);
NSLog(@"Pokopoko:%@",[arr mutableArrayValueForKey:@"Pokopoko"]);
}
@end
出力
2012-11-08 10:09:33.308 TheTest[836:11303] (
"<Pokopoko: 0x9163fd0>",
"<Pokopoko: 0x9163f10>",
"<Pokopoko: 0x9164120>"
)
2012-11-08 10:09:33.309 TheTest[836:11303] oppp:(
1,
0,
1
)
2012-11-08 10:09:33.310 TheTest[836:11303] po:(
OOOO,
"<null>",
"<null>"
)
2012-11-08 10:09:33.310 TheTest[836:11303] Pokopoko:(
"<null>",
"<null>",
"<Pokopoko: 0x9164110>"
)
***注意
存在しないキーを指定すると落ちる。
最終更新:2012年11月08日 10:40