valueForKey不返回正确的值

时间:2013-10-11 11:54:01

标签: ios objective-c nsdictionary

在我的应用程序中有一个名为“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 ....它的工作原理。但价值实际上是一样的。这不起作用。请有人帮帮我吗?

2 个答案:

答案 0 :(得分:1)

[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]];

答案 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]];