28

Tôi đã thêm UIImagePickerController vào UIViewController. Tôi cũng đã gán UIImagePickerControllerDelegate cho số UIViewController.iPhone - UIImagePickerControllerKho thừa kế kế thừa

Khi tôi thực hiện dòng sau,

myPicker.delegate = self; 

Xcode quà tặng cho tôi với thông báo sau:

cảnh báo: gán để id từ loại không tương thích 'RootViewController'

Sau đó, tôi đã thêm giao thức UINavigationControllerDelegate vào cùng một UIViewController và thông báo lỗi biến mất.

Vì vậy, tôi có phải thêm cả hai giao thức vào UIViewController khi tôi thêm UIImagePickerController không?

Nếu UIImagePickerController là lớp con của UINavigationController như được nêu trong tài liệu, điều này có nên tự động không? Tại sao tôi phải thêm giao thức đại biểu của cha mẹ và không chỉ giao thức UIImagePickerControllerDelegate?

Đây có phải là lỗi hoặc tôi thiếu gì đó không?

Trả lời

61

Như bạn đã lưu ý, UIImagePickerController được thừa kế từ UINavigationController. Nó sử dụng cùng một thuộc tính delegate mặc dù và không khai báo một (giả định) "imagePickerDelegate" của riêng nó, do đó, đại biểu của bạn phải phù hợp với cả hai giao thức. Nó có ý nghĩa, bởi vì bạn cũng chỉ định cùng một đại biểu cho phần UINavigationController (không biết gì về bộ chọn hình ảnh).

Thiết kế API có chút nghi ngờ ở đây theo ý kiến ​​của tôi, nhưng dù sao, tất cả các phương thức trong UINavigationControllerDelegate là tùy chọn, vì vậy nó đủ để khai báo rằng bạn tuân thủ giao thức và được thực hiện với giao thức này.

+1

nó vô lý và phá vỡ ý thức chung, và các tài liệu, như mọi khi, mơ hồ như địa ngục - nhưng tôi nghi ngờ vấn đề là một cái gì đó như thế. Dù sao cũng cảm ơn! – SpaceDog

33

Thêm các mã này như dưới đây, bạn có thể thấy cảnh báo biến mất.

@interface viewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> { } 
@end 

Nghị định thư của UIImagePickerControllerUINavigationController phải được bổ sung trong giao diện của bạn, điều này có thể làm cho các cảnh báo vô hình.

+0

Cảm ơn điều này giúp tôi .. – Shivaay

+0

Cảm ơn bạn đã giúp tôi rất nhiều và giải quyết vấn đề nhanh chóng – Rinku