2011-12-29 125 views
7

我似乎有問題將CGRect存儲到NSDictionary。我正在使用的代碼:NSDictionary不正確地存儲CGRect?

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 var,然後NSValue var來手動分解它,並將其粘貼到字典中,並得到相同的結果。

任何幫助表示讚賞。謝謝

謝謝。

回答

19

參數的順序應該是(object,key,object,key,...),所以在你的代碼中對象是@"Crocodile",關鍵是rect。

交換它們,它應該工作:該鍵不爲的NSString的實例所需

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

注意,它們可以是符合NSCopying類的任何實例。

+0

哇,你是對的。我正在關注這些示例: http://cocoadevcentral.com/articles/000010.php – user339946 2011-12-29 17:28:57

+0

@ user339946我會聯繫該文章的作者並告訴他/她的代碼是錯誤的。 – 2011-12-29 17:32:25

+0

啊,公平地說,這篇文章發表於2001年。:/ – user339946 2011-12-29 17:35:49

10

你可以把它保存爲NSString的 -

 NSStringFromCGRect(<#CGRect rect#>) 

然後用

  CGRectFromString(<#NSString *string#>) 

好運恢復

+0

感謝您的支持,這非常實用! – PetrV 2013-04-17 08:05:48

+0

+1有助於將動畫數據收集到NSDictionary中。 – iwasrobbed 2013-05-06 19:46:18

+0

感謝隊友,這是更清晰的方式 – Resty 2016-02-10 20:08:47