NSArrayやNSDictionaryには NSInteger、CGFloat、BOOLなどのプリミティブな型をそのままでは格納できません。
だけど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)
ちなみにNSArrayやNSDictionaryにはクラス(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 comments:
コメントを投稿