我的代码中有以下几行:
[registerDefaults setValue:NO forKey:UserDefaultsGameSortAscendingKey];
[registerDefaults setValue:YES forKey:UserDefaultsReminderSortAscendingKey];
为什么我在第二行而不是第一行收到警告?
不兼容的整数到指针转换
UserDefaultsGameSortAscendingKey
和UserDefaultsReminderSortAscendingKey
都定义为常量:
extern NSString *const UserDefaultsGameSortAscendingKey;
extern NSString *const UserDefaultsReminderSortAscendingKey;
答案 0 :(得分:4)
您需要将BOOL包装为NSNumbers以将它们存储为默认值:
[registerDefaults setValue:[NSNumber numberWithBool:NO] forKey:UserDefaultsGame...];
[registerDefaults setValue:[NSNumber numberWithBOOL:YES] forKey:UserDefaultsGame...];
答案 1 :(得分:2)
您应该使用setBool:forKey:
。这将消除警告(@ isaac的答案解释了原因),节省了编写代码的时间,并且因为为您完成任何转换/转换而不易出错:
[registerDefaults setBool:NO forKey:UserDefaultsGameSortAscendingKey];
[registerDefaults setBool:YES forKey:UserDefaultsReminderSortAscendingKey];
setBool:forKey:
将指定的默认键的值设置为指定的布尔值 值。
- (void)setBool:(BOOL)value forKey:(NSString *)defaultName
value
要存储在默认数据库中的布尔值。
defaultName
与值相关联的关键。
答案 2 :(得分:0)
是的,正如其他人指出的那样,你应该使用setBool:forKey:或将BOOL包装在NSNumber中。现在回答你的实际问题:
setValue:forKey:定义为:
- (void)setValue:(id)value forKey:(NSString *)key
value是id类型,它是指向任何类型对象的指针。 NO计算结果为0或nil,这是id(或任何指针)类型的变量的有效版本。 YES计算结果为1,这不是id类型变量的有效值。因此警告。