2013-10-11 7 views
0

В моем приложении есть NSDictionary под названием «selectedItems» и содержит ключ «Заказ». Значение может быть изменено пользователем. Определения NSDictionary lokks как это:valueForKey не возвращает правильное значение

self.selectedItems = [NSMutableDictionary dictionaryWithObjects:@[self.choosedAttributes, @"Reihennfolge"] forKeys:@[@"Sorted by" ,@"Order"]]; 

мне нужно установить BOOL значение, и я могу легко установить значение, как этого

[self.selectedItems setValue:[NSNumber numberWithBool:NO] forKey:@"Order"]; 

После этой операции значения передать на прочий ViewController, где я хочу прочитать значение.

NSSortDescriptor *mySortDesc = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:(Boolean)[stvc.selectedItems valueForKey:@"Order"]]; 

Это не удалось. Значение [stcv.selectedItems valueForKey: @ «Order»] является правильным (NSLog сообщает мне об этом) Но это не влияет на графический интерфейс (заказывая «Лица по имени по возрастанию или по убыванию»). Но если я набираю статический номер или константу, например ДА или НЕТ, она работает. Но значение действительно одно и то же. и это не сработает. Может ли кто-нибудь помочь мне, пожалуйста?

+0

Что делает код выглядеть в контроллере, где вы пытаетесь использовать стоимость? –

ответ

1

[stvc.selectedItems valueForKey:@"Order"] возвращает (указатель на) NSNumber объект. Если вы просто примените это к булевому скаляру, результат всегда будет «истинным», потому что указатель не является NULL.

Вы должны использовать

... ascending:[[stvc.selectedItems valueForKey:@"Order"] boolValue] ... 

вместо этого.

Примечание: Лучшее использование objectForKey и setObjectForKey для доступа к клавишам словаря. valueForKey предназначен для кодового кодирования с ключевыми значениями.

Еще лучше: Используйте новый синтаксис (документированной здесь: http://clang.llvm.org/docs/ObjectiveCLiterals.html)

stvc.selectedItems[@"Order"] = @NO; 

NSSortDescriptor *mySortDesc = [[NSSortDescriptor alloc] initWithKey:@"firstName" 
     ascending:[stvc.selectedItems[@"Order"] boolValue]]; 
+0

О, иногда это так просто. Да, это было правильное решение, спасибо вам большое за это и за подсказки для нового синтаксиса – user1895268

0

Вы не можете просто бросить NSNumber объект bool,

если вы пытаетесь NSLog как:

NSLog(@"%d",(Boolean)[stvc.selectedItems valueForKey:@"Order"]); 

Он напечатает значение . (Таким образом, литье 100 булево эквивалентно положить YES)

Вместо:

NSSortDescriptor *mySortDesc = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:(Boolean)[stvc.selectedItems valueForKey:@"Order"]]; 

использование:

NSSortDescriptor *mySortDesc = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:[[selectedItems valueForKey:@"Order"] boolValue]]; 
Смежные вопросы