2012-01-04 22 views
6

Tôi đã thử một ứng dụng để kiểm tra giao tiếp bluetooth. Nó là một ứng dụng đơn giản mà chỉ cần gửi một tin nhắn ở dạng văn bản từ một iDevice khác. Ban đầu, ứng dụng này có khoảng 6 cảnh báo nhưng tôi đã sửa tất cả trừ hai cảnh báo. Họ là như nhau nhưng đối phó với các đại biểu khác nhau. Một là dành cho GKPeerPickerControllerDelegate và một cho GKSessionDelegate. Nói lỗi Picker là cho GKPeerPickerController tên bảng chọn, khi bạn gõ (hoàn chỉnh hơn ví dụ để làm theo):Một chút cảnh báo gây phiền nhiễu mà vẫn cho phép ứng dụng hoạt động nhưng muốn xóa

picker.delegate = self; 

trình biên dịch nói:

Đi qua '* const ___ mạnh' để tham số của loại tương thích ' ID'.

Đối với tên phiên GKSession, gõ

session.delegate = self; 

làm cho trình biên dịch nói:

Sending '* const ___ mạnh' để tham số của loại tương thích 'id'.

Chỉ bật trong nút để gửi và peerPickerController. Tôi biết rằng những cảnh báo này không cản trở khả năng hoạt động của ứng dụng nhưng tôi muốn cập nhật hoàn toàn điều này cho Xcode 4.2. Ứng dụng này ban đầu được viết cho Xcode khi iOS 3.0 mới. Có, tôi hơi cầu kỳ khi nói đến viết hoặc thực hành mã, nó không được chứa bất kỳ lỗi/cảnh báo nào khi có thể.

Đây là những khối mã nơi cảnh báo xảy ra:

-(IBAction)btnConnect:(id)sender{ 
    picker = [[GKPeerPickerController alloc] init]; 
    picker.delegate = self; //Warning here 
    picker.connectionTypesMask = GKPeerPickerConnectionTypeNearby; 

    [connect setHidden:YES]; 
    [disconnect setHidden:NO]; 
    [picker show]; 
} 

-(void)peerPickerController:(GKPeerPickerController *)PCpicker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session{ 
    self.currentSession = session; 
    session.delegate = self; //Warning here 
    [session setDataReceiveHandler:self withContext:nil]; 
    PCpicker.delegate = nil; 

    [PCpicker dismiss]; 
} 

Edit:

Phần header có này:

@interface BTViewController : UIViewController{ 
GKSession *currentSession; 
IBOutlet UITextField *txtMessage; 
IBOutlet UIButton *connect; 
IBOutlet UIButton *disconnect; 

GKPeerPickerController *picker; 

}

+1

+1 cho cố gắng loại bỏ tất cả các cảnh báo cuối cùng ** **! –

+0

Cảm ơn, tôi luôn cố gắng đảm bảo rằng những gì tôi viết không có vấn đề gì. Lập trình cho iOS là khác với Windows, mà tôi cũng làm cho công việc. Mã số –

+0

biên dịch gọn gàng với '-Wall' luôn có ít vấn đề hơn cách khác. –

Trả lời

5

Tôi tin rằng mọi lớp học self có thể không áp dụng các giao thức chính thức GKPeerPickerControllerDelegateGKSessionDelegate. Bạn có thể đăng tiêu đề giao diện của mình không?

EDIT

Đúc để id sẽ xóa những lời cảnh báo, nhưng bạn thực sự không "sửa chữa" bất cứ điều gì ...nhìn vào tiêu đề lớp, nó không áp dụng các giao thức mà các đại biểu đang mong đợi.

Sửa đổi giao diện của bạn thông qua những giao thức:

@interface BTViewController : UIViewController <GKPeerPickerControllerDelegate, GKSessionDelegate> { 
+0

Tôi đã chỉnh sửa, tôi đã thêm tiêu đề cho nó –

+0

Nếu có thể, làm thế nào nó có thể áp dụng các giao thức chính thức? Điều này sẽ hữu ích khi hiểu thêm về lập trình cho iOS. –

+0

Câu trả lời của tôi cho bạn biết cách thêm các giao thức vào lớp của bạn. Tôi khuyên bạn nên đọc hướng dẫn của Apple về Giao thức để hiểu rõ hơn - http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocProtocols.html –

3

gì về session.delegate = (id)self. Có thể bạn chỉ cần tự tạo ID thay vì const____strong.

EDIT: Tại cuộc chinh phục của OP, giải thích là theo thứ tự. Loại id là cần thiết cho giao thức, bởi vì bản thân giao thức được định nghĩa theo chính id (id<GKSessionDelegate>, v.v.). Lý thuyết của tôi (bởi vì tôi không sử dụng ARC trong bất kỳ dự án nào của tôi) Có phải trình biên dịch rất chính xác để nó có thể đảm bảo rằng lớp của bạn an toàn để phát hành. Có lẽ bạn đã khởi tạo lớp học của bạn theo cách không phải là id ... Tất nhiên tôi không biết làm thế nào, nếu có ai biết; Tôi rất sẵn lòng cho phép họ chỉnh sửa câu trả lời này.

CHỈNH SỬA 2: như Teddy đã nói, việc áp dụng các giao thức trong tệp tiêu đề của bạn cũng sẽ tắt tiếng cảnh báo này. Tôi xin lỗi vì nghĩ rằng nó được ngụ ý rằng bạn đã áp dụng các giao thức.

+1

Điều đó đã làm rõ các cảnh báo. Cảm ơn bạn. Bạn có thể giải thích ID so với const___strong không? –

+0

Tôi không nghĩ câu trả lời này sửa chữa cảnh báo chính xác ... vui lòng xem câu trả lời của tôi. –

+0

Reddy, anh ấy đang sử dụng ARC. Trong ARC, lớp của anh ta có thể được khởi tạo như là (nonatomic, strong). Làm thế nào một typecast không sửa chữa được điều đó? Và tôi nghĩ nó khá rõ ràng rằng anh ấy đã tuân thủ các giao thức. – CodaFi

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