2013-07-10 16 views
28

Trong dự án của tôi, nó cho biết Chỉ định cho 'AppDelegate *' từ loại không tương thích 'id'.Chỉ định cho 'AppDelegate *' từ loại không tương thích 'id <UIApplicationDelegate>'

Chính xác điều này là gì? Tại sao cảnh báo này lại xảy ra?

Tôi đã khai báo trong .m

AppDelegate *appdev; 

và trong viewDidLoad

{ 
    appdev = [[UIApplication sharedApplication]delegate];  <= warning here 
} 

Tôi muốn ẩn cảnh báo này. Tôi nên làm gì? Cảm ơn trước.

+0

Tôi chỉ tự hỏi vì tôi không nhận được bất kỳ cảnh báo với mã của bạn. Bạn sử dụng phiên bản Xcode nào? –

+0

Tôi đang chia sẻ appdelegate cho các viewcontroller khác để xử lý sự kiện. Bằng cách nhập # AppDelegate.h và khai báo AppDelegate * xyz, tôi nhận được cảnh báo này. Bây giờ tôi đã sửa nó bằng cách sử dụng câu trả lời dưới đây.Vâng, tôi đang sử dụng Xcode mới nhất 4.6.3 –

+0

Lạ, tôi không nhận được cảnh báo nếu tôi làm điều tương tự. Tất nhiên có một loại rõ ràng đúc "sửa chữa" cảnh báo, nhưng tôi vẫn tự hỏi tại sao điều này cần thiết cho bạn và không phải cho tôi. - AppDelegate có được khai báo là '@interface AppDelegate: UIResponder ' không? –

Trả lời

78

vì bạn biết họ bằng, thêm một tông để cho trình biên dịch biết

AppDelegate* app = (AppDelegate*)[[UIApplication sharedApplication]delegate]; 

vì đây có thể đi lên trong Swift quá

let app = UIApplication.shared.delegate as! AppDelegate 
+0

Tôi không chắc đây có phải là lời giải thích đúng hay không. Việc gán một 'id objB' cho' AppDelegate * objA' không tạo ra một cảnh báo trong mã của tôi (chỉ theo cách khác). Và thực ra tôi không nhận được cảnh báo cho mã từ câu hỏi. Phải có một cái gì đó khác ... –

+0

@Martin R.Here, tôi cũng đã thử id

+0

Không được cần thiết phải sử dụng diễn viên rõ ràng.Tôi giả định rằng AppDelegate được khai báo là phù hợp với một giao thức bổ sung, so sánh http://stackoverflow.com/questions/11147239/xcode-appdelegate-const-strong-to-parameter-of-incompatible-type-error. –

3

Bạn có thể nhập để truyền thông báo cảnh báo.

thử:

appdev = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
1

Bạn cần phải gõ dàn diễn viên vì nó sẽ trả về Nghị định thư.

appdev = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
7

Nếu bạn muốn, bạn có điều này cho nhậpAppDelegateở bất cứ đâu. Thì đơn giản.

TRÊN appdelegate

/** 
* Get AppDelegate 
* Call [AppDelegate getAppDelegate] 
* 
* @return AppDelegate 
*/ 
+ (AppDelegate *) app { 
    return (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
} 

bất cứ nơi nào trong lớp bạn

#import "AppDelegate.h" // TOP OF YOUR CLASS 

AppDelegate *app = [AppDelegate app]; 
+0

trong objC và cũng nhanh chóng, bạn KHÔNG nên đặt tên cho một getter 'getXY' –

+0

@ Daij-Djan tôi đã thay đổi phản hồi của tôi – YannickSteph

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