2011-12-29 24 views
7

Tôi dường như gặp sự cố khi lưu trữ CGRect vào một số NSDictionary. Mã Tôi đang sử dụng:NSDictionary không lưu trữ đúng CGRect?

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

Từ những gì tôi đã đọc, mà nên quấn CGRect tôi lên thành một NSValue và lưu nó vào từ điển.

Tuy nhiên, khi tôi cố gắng NSLog nó, trở về giá trị như {{0,0}, {0,0}}

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

Tôi đã kiểm tra đếm từ điển của tôi và các mục dường như được chèn . Tôi không chắc chắn nơi này là thất bại. Tôi cũng đã cố gắng tự chia nhỏ nó bằng cách tạo một biến số CGRect var, sau đó là một biến số NSValue và dán vào từ điển với cùng một kết quả.

Bất kỳ trợ giúp đánh giá cao. Cảm ơn

Cảm ơn bạn.

Trả lời

19

Thứ tự của đối số phải là (đối tượng, khóa, đối tượng, khóa, ...), vì vậy trong mã của bạn đối tượng là @"Crocodile" và khóa là rect.

Trao đổi họ và nó cũng làm việc:

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

Lưu ý rằng phím không phải là trường hợp của NSString, họ có thể là bất kỳ trường hợp của một lớp phù hợp với NSCopying.

+0

Wow, cậu nói đúng. Tôi đã làm theo các ví dụ sau: http://cocoadevcentral.com/articles/000010.php – user339946

+0

@ user339946 Tôi sẽ liên hệ với tác giả của bài viết đó và cho họ biết rằng mã đó sai. –

+0

Ah, công bằng, bài viết đã được xuất bản vào năm 2001.:/ – user339946

10

Bạn có thể lưu nó như NSString -

 NSStringFromCGRect(<#CGRect rect#>) 

Và sau đó phục hồi với

  CGRectFromString(<#NSString *string#>) 

Good Luck

+0

cảm ơn vì điều này, nó rất hữu ích và dễ dàng với điều này! – PetrV

+0

+1 Hữu ích khi thu thập dữ liệu hoạt ảnh vào NSDictionary. – iwasrobbed

+0

Cảm ơn bạn đời, đó là cách rõ ràng hơn – Resty

Các vấn đề liên quan