Objective-C字典插入BOOL

Inf*_*ite 63 dictionary boolean objective-c

好的,我有点困惑.这可能只是一个微不足道的事情.

我有一个看起来像这样的函数:

- (void)getNumbersForNews:(BOOL)news andMails:(BOOL)mails {
NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init];
[parameters setValue:news  forKey:@"getNews"];
[parameters setValue:mails forKey:@"getMails"];...}
Run Code Online (Sandbox Code Playgroud)

无论我是否使用setValue:forKey:或setObject:ForKey:,我总是收到警告:

"传递set的参数1 ......从没有强制转换的整数中生成指针"......

我怎么在字典中插入一个bool?

Ste*_*son 124

NSDictionary必须是对象中的值.要解决此问题,请将布尔值包装在NSNumber对象中:

[parameters setValue:[NSNumber numberWithBool:news] forKey:@"news"];
[parameters setValue:[NSNumber numberWithBool:mails] forKey:@"mails"];
Run Code Online (Sandbox Code Playgroud)

  • 并且不要忘记使用Clang v3.1进行调整,我们可以使用文字:`NSNumber*yesNumber = @ YES`; 相当于`[NSNumber numberWithBool:YES]` (10认同)
  • 因此,正如@coco所说,你可以使用`@ YES`和`@NO`代替`[NSNumber numberWithBool:YES]`和`[NSNumber numberWithBool:NO]`.正如@AlBlue在下面指出的那样,稍后从字典中检索值的方法是使用`[[myDictionary objectForKey:theKey] boolValue]`. (9认同)

Vla*_*mir 14

Objective-C容器只能存储Objective-C对象,因此您需要将BOOL包装在某个对象中.您可以使用[NSNumber numberWithBool]并创建结果来创建NSNumber对象.
稍后您可以使用NSNumber获取布尔值-boolValue.


AlB*_*lue 8

BOOL不是对象 - 它是int的同义词,其值为0或1.因此,它不会被放入包含对象的结构中.

您可以使用NSNumber为任何整数类型创建对象包装器; [NSNumber numberWithBool:]你可以调用一个构造函数来获取一个对象,然后使用它.同样,您可以使用它来再次获取对象:[obj boolValue].


Hat*_*r J 8

现代代码供参考:

parameters[@"getNews"] = @(news);
Run Code Online (Sandbox Code Playgroud)


Eim*_*tas 6

你可以插入@"YES"或@"NO"串起对象,一旦你读回它们,Cocoa就会把它投射到bool.

否则我建议使用工厂方法创建字典dictionaryWithObjectsAndKeys:.