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"]; 

这将参数NSDictionarynews键设置为null(出于某种原因不能真正理解为什么)

我唯一的解决方法是使用@ Eimantas的方式如下:

 [parameters setValue:[NSNumber numberWithBool:myObject.hasNews ? @"YES" : @"NO"] forKey:@"news"]; 

这工作完美无瑕。 不要问我为什么直接通过BOOL不起作用,但至less我find了一个解决scheme。 有任何想法吗?