在我的应用程序中有一个名为“selectedItems”的NSDictionary,它包含密钥“Order”。用户可以更改该值。 NSDictionary的定义如下:
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没有影响(按名称按人数排序升序或降序)。但是,如果我键入静态数字或常数,如YES或NO ....它的工作原理。但价值实际上是一样的。这不起作用。请有人帮帮我吗?
答案 0 :(得分:1)
[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]];
答案 1 :(得分:0)
您不能只将NSNumber
对象转换为bool
,
如果您尝试NSLog
喜欢:
NSLog(@"%d",(Boolean)[stvc.selectedItems valueForKey:@"Order"]);
它会打印 100 的值。 (所以施放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]];