2012-08-16 19 views
11

tôi đặt một breakpoint ...Làm cách nào tôi có thể nhận được giá trị/khóa của đối tượng NSDictionary trong bảng điều khiển trình gỡ lỗi?

nếu tôi làm:

(lldb) print [self dictionary] 
(NSDictionary *) $5 = 0x0945c760 1 key/value pair 

nhưng nếu tôi làm:

(lldb) print [[self dictionary] allKeys] 
error: no known method '-allKeys'; cast the message send to the method's return type 
error: 1 errors parsing expression 

Thậm chí nếu tôi cố gắng truy cập vào chìa khóa mà tôi biết là ở đó ..

(lldb) print [[self dictionary] objectForKey:@"foobar"] 
error: no known method '-objectForKey:'; cast the message send to the method's return  type 
error: 1 errors parsing expression 

Tôi đang làm gì sai?

+1

Điều đầu tiên bạn làm là gắn thẻ câu hỏi này là 'xcode'. –

+0

'po [self dictionary]' – Joe

Trả lời

14

Bạn có nói được tiếng Anh không? - Có vẻ như bạn làm, khá tốt! Và ah, thật trùng hợp, trình gỡ rối cũng có!

Rất tốt, chúng tôi đã hoàn thành phần khó khăn. Vì vậy, bây giờ mà bạn hiểu nhau với trình gỡ lỗi, chúng ta hãy xem những gì nó gợi ý:

error: no known method '-objectForKey:'; cast the message send to the method's return type 

Vì vậy, nó sẽ cho bạn biết nó không thể suy ra thông tin kiểu trả về chỉ từ tên của gửi tin nhắn - và đó là hoàn toàn tốt đẹp (một người không sử dụng ký hiệu Hungary, phải không?). Và thậm chí nó còn cho bạn biết chính xác bạn phải giải quyết vấn đề đó như thế nào - bạn phải truyền tin nhắn gửi tới loại trả về của phương thức.

Kích hoạt tài liệu của Apple, chúng tôi phát hiện ra rằng - [NSDictionary objectForKey:] trả về id - loại đối tượng chung-C chung. Đúc để id (hoặc thậm chí tốt hơn, nếu bạn biết những gì loại của các đối tượng từ điển của bạn nắm giữ, đúc để loại đối tượng chính xác) hiện các trick:

(lldb) print (MyObject *)[(NSDictionary *)[self dictionary] objectForKey:@"foobar"] 
+1

Tôi cảm ơn bản thân thông minh của bạn! :) Tôi sẽ để lại một ví dụ khác về vấn đề này: ** Thất bại: ** 'in [[[tự.collectionView gestureRecognizers] objectAtIndex: 0] isKindOfClass: [UITapGestureRecognizer class]] ' ** Tốt: **' print (BOOL) [[[self.collectionXem gestureRecognizers] objectAtIndex: 0] isKindOfClass: (Lớp) [UITapGestureRecognizer class]] ' Lưu ý 2 phôi cần thiết để làm cho nó hoạt động. – Jeff

+0

Để nó vào Objective C để đơn giản ra khỏi ngu ngốc đơn giản. –

3

Tại sao không chỉ làm

NSLog(@"dict: %@", dictionary); 

hoặc

NSLog(@"dict objectForKey:foobar = %@", [dictionary objectForKey:@"foobar"]); 
+0

Tôi nghĩ anh ta đang cố lấy thông tin từ bảng điều khiển chứ không phải mã nguồn. Tuy nhiên đó là cách tốt hơn để làm điều đó theo ý kiến ​​của tôi. –

13

Lệnh LLĐB in hy vọng rằng giá trị mà bạn muốn in là một tổ chức phi vật thể. Lệnh bạn nên sử dụng để in các đối tượng là po.

Khi bạn yêu cầu lldb in giá trị, nó sẽ tìm một phương thức được gọi là allKeys trả về một đối tượng không thành công và không thành công. Hãy thử lệnh sau thay thế ...

po [[self dictionary] allKeys] 
3

Để in description của đối tượng trong GDB hoặc LLĐB bạn cần để sử dụng print-object hoặc po.

(lldb) po [self dictionary] 
(lldb) po [[self dictionary] objectForKey:@"foobar"] 
0

Dường như có lỗi trong lldb gây ra po dictionary[@"key"] để in dòng trống hơn giá trị của khóa. Sử dụng [dictionary[@"key"] description] để nhận giá trị thay thế.

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