NSDictionary不能正确存储CGRect?

9

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

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

根据我的阅读,这应该将我的CGRect包装到一个NSValue中,并将其存储到字典中。

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

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

我已经检查了我的字典计数,似乎项目已经被插入。我不确定这个失败的地方在哪里。我还尝试手动拆分它,创建一个CGRect变量,然后创建一个NSValue变量,并将其插入到字典中,结果相同。
任何帮助都将受到赞赏。谢谢。
谢谢。
2个回答

19
参数的顺序应该是(对象,键,对象,键,...),所以在您的代码中,对象是@"鳄鱼",键是rect。

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

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

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

哇,你说得对。我正在跟随这些示例: http://cocoadevcentral.com/articles/000010.php - user339946
@user339946 我会联系那篇文章的作者,并告诉他/她代码是错误的。 - user142019
啊,公平地说,这篇文章是在2001年发表的。 :/ - user339946
3
@user339946,这并不代表它就是可以接受的。自从Mac OS X v10.0以来,该方法并没有改变。 - user142019

10

你可以将它存储为NSString类型 -

        NSStringFromCGRect(<#CGRect rect#>)

然后进行恢复

         CGRectFromString(<#NSString *string#>)

祝你好运


+1 对于将动画数据收集到NSDictionary中非常有帮助。 - iwasrobbed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接