9

tôi đang nhận được một NSInvalidArgumentException với lý do: -[UITapGestureRecognizer initWithCoder:]: unrecognized selector sent to instanceiOS5 Ổn App Đâm trong iOS4.3 Simulator

hiểu biết của tôi là UITapGestureRecognizers được hỗ trợ trong ios4.x?

có thể tải tệp xib khác cho các phiên bản phụ ios5 không?

+2

Chúng được hỗ trợ trong 4.x, điều là bạn không thể chỉ thả chúng vào xib (tôi cho rằng đó là trường hợp ở đây). Bạn không thể đặt nó trong mã hoặc tạo một xib khác và tải nó sau khi kiểm tra phiên bản. – mit3z

+0

Xem [câu hỏi có khả năng liên quan này] (http://stackoverflow.com/questions/6520932/uigesturerecognizer-in-uiview-object). Có thể bạn cần phải khởi tạo UITapGestureRecognizers của mình theo một cách khác. –

+0

Dường như với tôi rằng trình nhận dạng của bạn đang bị phân phối ... UIGestureRecognizer không trả lời -initWithCoder: và đó là lý do tại sao nó bị lỗi. (Tôi nghĩ rằng con trỏ deallocate để đối tượng UIGestureRecognoizer của bạn đang được thực hiện trên bởi một đối tượng khác, đó là vụ phải trả lời initWithCoder: ...) –

Trả lời

17

Khi @ mit3z nêu rõ nhận xét của mình về câu hỏi gốc, iOS 4.3 chỉ hỗ trợ tính năng này khi thiết lập thủ công bằng mã. Nó không được hỗ trợ với Interface Builder.

Apple sẽ cứu tất cả chúng tôi đau buồn về điều này nếu họ chỉ đơn giản thêm điều này làm cảnh báo thời gian xây dựng.

+1

Điều này giải quyết được vấn đề của tôi. Để biết cách thêm GestureRecognizer qua mã nhanh, hãy xem câu trả lời tại đây: http://stackoverflow.com/questions/5954934/issue-with-a-uitapgesturerecognizer –

1

Tôi nghĩ bạn có một đối tượng tuân thủ NSCoding được deallocated trước vụ tai nạn. UITapGestureRecognizer được cấp phát tại địa chỉ của nó và khi đối tượng biến mất (nhưng không phải tham chiếu của nó) cố gắng gọi initWithCoder, nó thực sự gọi phương thức này trên gestureRecognizer của bạn.

Sau đó, sự cố của bạn xuất phát từ đối tượng được phân bổ lại đó chứ không phải từ cử chỉ nhận dạng cử chỉ của bạn.

Đảm bảo giữ lại tất cả các thuộc tính IBOutlet của bạn.

+0

tôi làm giữ lại cuộc gọi trên tất cả các IBOutlets. Tôi đang sử dụng ARC ... – Andy

+0

Bạn không thể sử dụng cả ARC lẫn giữ cuộc gọi. Nếu các cuộc gọi để giữ lại biên dịch, bạn không sử dụng ARC. –

+0

Tôi cho rằng anh ta có nghĩa là anh ta đang gõ 'strong' hoặc' giữ lại 'gõ các thuộc tính IBOutlet của anh ta, không thực sự gọi là giữ lại các đối tượng. Nếu anh ta thực sự gọi 'giữ lại' với vòng cung, mã sẽ không biên dịch. – btomw

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