Objective-C словарь вставка BOOL
хорошо, я немного запутался.
Это, наверное, просто тривиальность.
у меня есть функция, которая выглядит примерно так:
- (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 в словарь?
6 ответов:
значения
NSDictionaryдолжны быть объекты. Чтобы решить эту проблему, оберните логические значения вNSNumberобъекты:[parameters setValue:[NSNumber numberWithBool:news] forKey:@"news"]; [parameters setValue:[NSNumber numberWithBool:mails] forKey:@"mails"];
контейнеры Objective-C могут хранить только объекты Objective-C, поэтому вам нужно обернуть BOOL в какой-то объект. Вы можете создать объект NSNumber с
[NSNumber numberWithBool]и сохраняем результат.
Позже вы можете получить логическое значение обратно с помощью NSNumber в-boolValue.
BOOL не является объектом - это синоним для int и имеет 0 или 1 в качестве его значений. В результате он не будет помещен в структуру, содержащую объект.
Вы можете использовать NSNumber для создания оболочки объекта для любого из целочисленных типов; есть конструктор
[NSNumber numberWithBool:]Что вы можете вызвать, чтобы получить объект, а затем использовать его. Аналогично, вы можете использовать это, чтобы вернуть объект обратно:[obj boolValue].
вы можете вставить
@"YES"или@"NO"строковые объекты и Cocoa бросят его в bool, как только вы их прочитаете.В противном случае я бы предложил создать словарь с помощью Заводского метода, как
dictionaryWithObjectsAndKeys:.
видя ответ @Steve Harrison, у меня есть один комментарий. По какой-то причине это не работает с передачей свойств объекта, например,
[parameters setValue:[NSNumber numberWithBool:myObject.hasNews] forKey:@"news"];установка
newsключ к null в параметреNSDictionary(почему-то не могу понять, почему)моим единственным решением было использовать путь @Eimantas следующим образом:
[parameters setValue:[NSNumber numberWithBool:myObject.hasNews ? @"YES" : @"NO"] forKey:@"news"];это работало безотказно. Не спрашивайте меня, почему проходя мимо
BOOLнапрямую не работает, но, по крайней мере, я нашел решение. Любой идеи?
Comments