2011-09-19 46 views
10

Tôi đang phát xung quanh với bộ bản đồ và tôi đã tạo chú thích. Tôi đang cố gắng tìm lỗi của mình do lỗi này:Đặt điểm ngắt tại NSKVODeallocateBreak

An instance 0x1b7ac0 of class AddressAnnotation was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. Set a breakpoint on NSKVODeallocateBreak to stop here in the debugger. Here's the current observation info:

Tôi không chắc chắn nơi mà NSKVODeallocateBreak đặt điểm ngắt là. Tôi nghĩ tôi có thể sử dụng các công cụ để gỡ lỗi nó, nhưng khi tôi cố gắng, nó bị treo mà không cho tôi bất kỳ dấu hiệu nào cho thấy nó bị rơi ở đâu. Có suy nghĩ gì không?

Trả lời

16

Bạn có lẽ làm một cái gì đó như thế này trong mã của bạn:

[addressAnnotation addObserver:self forKeyPath:kSelectedAnnotationObserverKeyPath options:NSKeyValueObservingOptionNew context:@"selectedOrDeselected"];

Điều đó có nghĩa rằng bạn đang đăng ký một người quan sát để tìm hiểu khi một chú thích đã được chọn.

Bạn nên loại bỏ các quan sát viên khi chú thích bị xóa khỏi bản đồ, như thế này:

[addressAnnotation removeObserver:self forKeyPath:kSelectedAnnotationObserverKeyPath];

Điều đó sẽ loại bỏ các lỗi. Nếu không và bạn muốn gỡ lỗi, bạn chắc chắn nên đặt điểm ngắt trên NSKVODeallocateBreak. Để thực hiện việc này, hãy mở menu Run, Manage Breakpoints, Add symbolic breakpoint, nhập NSKVODeallocateBreak và bạn ở đó.

Hy vọng điều đó sẽ hữu ích!

+0

Tôi thực sự chỉ thêm chú thích là một thanh răng. Khi tôi cố gắng di chuyển nó sau một vài lần, tôi nhận được lỗi đó. Bằng cách thêm một ghim (chú thích vào mapView), tôi có ngầm thêm một người quan sát không? Cảm ơn. – Crystal

+6

Để đặt điểm ngắt biểu tượng trong Xcode 4, hãy chuyển sang trình điều hướng Breakpoint và nhấp vào nút dấu cộng nhỏ ở dưới cùng. (thông qua https://devforums.apple.com/thread/68421) – Palimondo

5

Để thiết lập một breakpoint ở đây với LLĐB, bắt đầu ứng dụng của bạn, sau đó dừng lại, đồng debug nhắc LLĐB viết:

breakpoint set --name NSKVODeallocateBreak 

Bây giờ bạn đã có một breakpoint ngồi đấy. Hy vọng rằng điều này sẽ giúp bạn tìm ra vấn đề, có thể sẽ thuộc loại được mô tả bằng cách @frowing

+0

là có một cách để thiết lập này ở một nơi khác mà không cần phải gõ điều này trong nhắc nhở gỡ lỗi LLDB mỗi lần? – Hlung

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