2014-06-09 18 views
23

Tôi cố gắng để khai báo một initializer định như thế này:NS_DESIGNATED_INITIALIZER mong đợi: (dấu hai chấm)

- (instancetype)initWithDelegate:(id <MyDelegate>)delegate NS_DESIGNATED_INITIALIZER; 

Nhưng nó được hiển thị cho tôi lỗi biên dịch này:

Expected ':' 

Điều thú vị là khi tôi cố gắng viết nó như thế này (liên kết tham chiếu: Adopting Modern Objective-C) -

- (instancetype)init NS_DESIGNATED_INITIALIZER; 

Nó hiển thị lỗi này:

Expected ';' after method prototype. 

Bất kỳ ý tưởng nào về cách sử dụng NS_DESIGNATED_INITIALIZER đúng cách?

+0

nếu bạn 'cmd' + bấm vào 'NS_DESIGNATED_INITIALIZER', những gì nó cung cấp cho bạn? –

Trả lời

33

NS_DESIGNATED_INITIALIZER macro không được xác định trong tiêu đề thư viện cho Xcode 5 - bạn cần Xcode 6 để sử dụng. Lưu ý liên kết của bạn cho biết "Tiền phát hành".

Các vĩ mô được xác định theo cách sau (trích dẫn NSObjCRuntime.h)

#ifndef NS_DESIGNATED_INITIALIZER 
#if __has_attribute(objc_designated_initializer) 
#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer)) 
#else 
#define NS_DESIGNATED_INITIALIZER 
#endif 
#endif 

Lưu ý bạn vẫn có thể sử dụng

- (instancetype)initWithDelegate:(id <MyDelegate>)delegate __attribute__((objc_designated_initializer)); 

trong Xcode 5 hoặc bạn có thể thêm macro một cách rõ ràng để tiêu đề biên dịch sẵn của bạn.

1

Ghi nhớ bạn chỉ có thể thêm video này vào giao diện hoặc tờ khai mở rộng lớp nếu không bạn sẽ nhận được lỗi này:

'objc_designated_initializer' attribute only applies to init methods of interface or class extension declarations 
Các vấn đề liên quan