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 в словарь?

589   6  

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].

современный код для ссылки:

parameters[@"getNews"] = @(news);

вы можете вставить @"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

    Ничего не найдено.