在我的应用程序中,有一个NSDictionary,名为“ selectedItems”,其中包含键“ Order”。该值可由用户更改。
NSDictionary lokk的定义如下:

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告诉我),但对GUI没有影响(按名称升序或降序对Persons进行排序)。但是,如果我键入一个静态数字或诸如YES或NO。之类的常量,则可以。但是价值确实是一样的。这是行不通的。有人可以帮我吗?

最佳答案

[stvc.selectedItems valueForKey:@"Order"]返回(指针)NSNumber对象。
如果仅将其转换为布尔型标量,则结果将始终为“ true”,因为
指针不为NULL。

你必须用

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


代替。

备注:最好使用objectForKeysetObjectForKey访问字典键。
valueForKey用于键值编码欺骗。

更好的是:使用新的语法(在此处记录:http://clang.llvm.org/docs/ObjectiveCLiterals.html

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

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

关于ios - valueForKey没有返回正确的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19317522/

10-11 00:32