Objective-C字典插入BOOL
好的,我有点困惑。 这可能只是一个小事。
我有一个这样的function:
- (void)getNumbersForNews:(BOOL)news andMails:(BOOL)mails { NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init]; [parameters setValue:news forKey:@"getNews"]; [parameters setValue:mails forKey:@"getMails"];...}
无论我使用setValue:forKey:
还是setObject:ForKey:
我都会收到警告:
“传递参数集1 …使整数指针没有投”…
我怎么把一个bool插入字典?
NSDictionary
值必须是对象。 为了解决这个问题,把布尔值NSNumber
对象:
[parameters setValue:[NSNumber numberWithBool:news] forKey:@"news"]; [parameters setValue:[NSNumber numberWithBool:mails] forKey:@"mails"];
Objective-C容器只能存储Objective-C对象,因此需要将BOOL包装在某个对象中。 您可以使用[NSNumber numberWithBool]
创build一个NSNumber对象并存储结果。
稍后,您可以使用NSNumber的-boolValue
布尔值。
BOOL不是一个对象 – 它是一个int的同义词,它的值为0或1。 因此,它不会被放在一个包含对象的结构中。
您可以使用NSNumber为任何整数types创build一个对象包装器; 有一个构造函数[NSNumber numberWithBool:]
,你可以调用获取一个对象,然后使用它。 同样,你可以使用它来获取对象: [obj boolValue]
。
你可以插入@"YES"
或者@"NO"
string对象,Cocoa将它读回给bool。
否则,我会build议使用工厂方法像dictionaryWithObjectsAndKeys:
创builddictionaryWithObjectsAndKeys:
。
现代代码供参考:
parameters[@"getNews"] = @(news);
看到@Steve Harrison的回答我确实有一个评论。 出于某种原因,这不适用于传递对象属性,例如
[parameters setValue:[NSNumber numberWithBool:myObject.hasNews] forKey:@"news"];
这将参数NSDictionary
的news
键设置为null(出于某种原因不能真正理解为什么)
我唯一的解决方法是使用@ Eimantas的方式如下:
[parameters setValue:[NSNumber numberWithBool:myObject.hasNews ? @"YES" : @"NO"] forKey:@"news"];
这工作完美无瑕。 不要问我为什么直接通过BOOL
不起作用,但至less我find了一个解决scheme。 有任何想法吗?