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。 有任何想法吗?