2012-04-11 18 views
6

Tôi vừa xem qua câu trả lời here nhưng không trợ giúp. Khi tôi thêm một thuộc tính không được chấp nhận chỉ để khai báo phương thức hơn là trình biên dịch nói Attributes on method implementation and its declaration must match. Tôi có cần thêm smth vào phương pháp triển khai phương pháp không?Cách sử dụng phương pháp không đúng cách trong Xcode 4

Cảm ơn!

Trả lời

13

Chỉ cần thêm thuộc tính đến việc khai:

@interface Blah 
- (void)method __attribute__((deprecated)); 
@end 

Cung cấp bao gồm bạn là chính xác cho bản dịch, điều này sẽ hoạt động tốt. Có lẽ bạn đã thêm thuộc tính vào định nghĩa , không phải là khai báo ? Nếu không, một cuộc biểu tình (mẫu mã) sẽ giúp ích.

Cập nhật

Mặc dù cách tiếp cận nêu trên làm việc cho thông điệp điển hình, dường như kêu vang bị nhầm lẫn với IBAction s.

Với các thuộc tính clang, ibaction được chèn ngầm (đối với những gì trước đây là typedef).

Khi thuộc tính được quy định trong tờ khai chỉ, sản lượng tiền xử lý như sau:

// preprocessed declaration 
- (void)__attribute__((ibaction))setSomething:(id)sender __attribute__((noreturn)); 
// preprocessed implementation 
- (void)__attribute__((ibaction))setSomething:(id)sender 
...  

Vì vậy, dường như trình biên dịch chỉ là nhầm lẫn bởi trang trí bí mật này, và bạn cũng phải thêm thuộc tính để việc triển khai/định nghĩa để ngăn chặn cảnh báo khi phương thức là IBAction.

+0

Điều này không hoạt động! –

+0

Hoạt động trên máy của tôi;) Đăng mã của bạn! – justin

+0

- (IBAction) showTag __attribute __ ((không được chấp nhận)); Tôi nhận được điều này: Các thuộc tính về cách triển khai phương thức và khai báo phải phù hợp. –

0

Bạn phải đặt thuộc tính không được chấp nhận trên cả khai báo và triển khai phương thức, ít nhất là trong Xcode 4.3.2 bằng tiếng kêu.

+0

Đúng vậy. Nhưng tại sao? –

+0

Nhún vai. Tôi đoán họ thực hiện nó một cách khác nhau trong clang hơn trong gcc. –

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