把 BOOL 放進 NSDictionary 會出錯,必需是要 NS系列的物件才能進戈。
解法1:
Values in an NSDictionary must be objects. To solve this problem, wrap the booleans in NSNumberobjects:
[parameters setValue:[NSNumber numberWithBool:news] forKey:@"news"];
[parameters setValue:[NSNumber numberWithBool:mails] forKey:@"mails"];
BOOL can be wrapped in an NSNumber object:
dicTemp[@"is_default"] = @YES;
(This code is using the newish Objective-C Literals syntax).
If you are old-fashioned (nothing wrong with that), then the above statement is the same as:
[dicTemp setObject:[NSNumber numberWithBool:YES]
forKey:@"is_default"];
To test later:
NSNumber *numObj = dicTemp[@"is_default"];
if ([numObj boolValue]) {
// it was YES
}
解法2:
The new syntax since Apple LLVM Compiler 4.0
dictionary[@"key1"] = @(boolValue);
dictionary[@"key2"] = @YES;
The syntax converts BOOL to NSNumber, which is acceptable to NSDictionary.