在我的应用程序中,有一个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] ...
代替。
备注:最好使用
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]];
关于ios - valueForKey没有返回正确的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19317522/