2012-10-21 19 views
6

Được yêu cầu tạo một danh mục có biến mới (thuộc loại NSArray).Làm cách nào để thêm biến vào danh mục trong Mục tiêu-C?

OriginalClass + Extension.h:

@interface OriginalClass (Extension) { 
    NSArray *_array; 
} 

@property (nonatomic, retain) NSArray *array; 

@end 

Nhưng tôi đã nhận lỗi: Cannot declare variable inside @interface or @protocol.

Hãy giúp giải quyết sự cố.

Trả lời

4

Như người khác đã nói, bạn không thể. Mặc dù đã chỉ ra H2CO3, bạn có thể sử dụng associative references. Trên Apple Documents:

Note that a category can’t declare additional instance variables for the class; it includes only methods. However, all instance variables within the scope of the class are also within the scope of the category. That includes all instance variables declared by the class, even ones declared @private.

Nếu bạn muốn đến đối tượng liên quan, bạn có thể sử dụng câu trả lời this. Hơn nữa, bạn có thể sử dụng this bài đăng của Ole Begemann.

+0

Giải pháp tuyệt vời, cảm ơn! – Dmitry

+0

@Altaveron Cách giải quyết tương tự mà H2CO3 đề xuất, trước đó ... (StackOverflow là lạ :-)) – aleroot

+0

Câu trả lời này có liên kết đến mã chính xác. – Dmitry

2

Đơn giản: bạn không thể thêm biến mẫu vào một lớp bằng cách sử dụng danh mục.

Nếu bạn cần lưu trữ dữ liệu bổ sung: sử dụng associated objects.

+0

Nhưng cách lưu trữ dữ liệu? – Dmitry

+1

@Altaveron có lẽ các đối tượng liên quan có thể giúp bạn. (Xem câu trả lời đã chỉnh sửa của tôi.) –

+1

Danh mục cho phép bạn thêm các phương thức vào một lớp hiện có. Giai đoạn. Xem http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/chapters/occategories.html – kamprath

3

Bạn có thể không, một loại có thể không khai báo các biến dụ thêm ...

tham khảo: here.

+0

Tôi nên sử dụng thông tin gì để thêm biến dữ liệu mới vào lớp học? – Dmitry

+0

Bạn sẽ phải phân lớp mặc dù – aleroot

+0

Tôi muốn sử dụng lớp đã sửa đổi với tên lớp gốc. – Dmitry