2011年2月6日日曜日

Objective-CのNSArrayやNSDictionaryに色々な値を格納する方法

NSArrayNSDictionaryには NSIntegerCGFloatBOOLなどのプリミティブな型をそのままでは格納できません。
だけどNSNumberでラップしてやれば格納可能です。

NSArray *list = [NSArray arrayWithObjects:
[NSNumber numberWithInt:100],
[NSNumber numberWithFloat:0.66],
[NSNumber numberWithBool:YES],
nil];

NSLog(@"int: %d", [[list objectAtIndex:0] intValue]); // 100
NSLog(@"float: %f", [[list objectAtIndex:1] floatValue]); // 0.66
NSLog(@"bool: %d", [[list objectAtIndex:2] boolValue]); // 1 (YES)


ちなみにNSArrayNSDictionaryにはクラス(Class)セレクタ(selector)も格納することができません。
その場合はリフレクションを利用。

NSDictionary *dict = [NSDictionary dictionaryWithObject:
  @"MyViewController", @"className", // MyViewController1というクラス名
  @"mySelector", @"selectorName", // mySelectorというセレクタ名
nil];

Class className = NSClassFromString([dict objectForKey:@"className"]);
UIViewController *myViewController = [[className alloc] init]; // MyViewControllerの初期化

SEL selector = NSSelectorFromString([dict objectForKey:@"selectorName"]);
[self performSelectorOnMainThread:selector
                       withObject:nil
                    waitUntilDone:NO]; // mySelectorの実行

0 件のコメント: