关于 iphone:NSDictionary 没有正确存储 CGRect?

 2022-01-07 

NSDictionary not properly storing CGRect?

我似乎在将 CGRect 存储到 NSDictionary 中时遇到问题。我正在使用的代码:

1
dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Crocodile", [NSValue valueWithCGRect:CGRectMake(100,100,200,200)], nil];

从我读过的内容来看,这应该将我的 CGRect package成一个 NSValue 并将其存储到字典中。

但是,当我尝试 NSLog 它时,该值返回为 {{0,0}, {0,0}}

1
NSLog(@"Crocodile value is: %@", NSStringFromCGRect([[dictionary objectForKey:@"Crocodile"] CGRectValue]));

我检查了我的字典数量,似乎插入了项目。我不确定这在哪里失败。我还尝试通过创建一个 CGRect 变量,然后创建一个 NSValue 变量来手动分解它,并将其粘贴到具有相同结果的字典中。

任何帮助表示赞赏。谢谢

谢谢。


参数的顺序应该是 (object, key, object, key, ...),所以在你的代码中,对象是 @"Crocodile",键是矩形。

交换它们,它应该可以工作:

1
2
3
4
dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSValue valueWithCGRect:CGRectMake(100,100,200,200)], // object first…
    @"Crocodile", // …then key
    nil];

请注意,键不需要是 NSString 的实例,它们可以是符合 NSCopying 的类的任何实例。


您可以将其存储为 NSString -

1
        NSStringFromCGRect(<#CGRect rect#>)

然后用

恢复

1
         CGRectFromString(<#NSString *string#>)

祝你好运