0

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

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.... 它可以工作。但价值真的是一样的。这不起作用。有人可以帮我吗?

4

2 回答 2

1

[stvc.selectedItems valueForKey:@"Order"]返回一个(指向一个)NSNumber对象。如果您只是将其转换为布尔标量,则结果将始终为“真”,因为指针不为 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]];
于 2013-10-11T12:04:05.270 回答
0

您不能只将NSNumber对象投射到bool,

如果您尝试NSLog喜欢:

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

它将打印值100。(所以铸造 100 boolean 相当于把 YES)

代替:

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

利用:

NSSortDescriptor *mySortDesc = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:[[selectedItems valueForKey:@"Order"] boolValue]];
于 2013-10-11T12:09:01.983 回答