Khi tôi cố gắng biên soạn ứng dụng của tôi cho OS 3 tôi gặp phải một lỗi sau:Thay đổi mục tiêu-C giữa OS 2.2.1 và OS 3?
lỗi: loại accessor không phù hợp với loại tài sản
Các lỗi được cho một tài sản tôi đã cố gắng để truy cập vào đó là được định nghĩa như sau:
NSMutableArray *myArray
@property (readonly,nonatomic) NSArray* myArray;
thuộc tính này được @synthesized trong tệp triển khai.
này chỉ làm việc tốt trong OS 2.2.1 nhưng không là OS 3.0
Viết phương pháp getter bản thân mình giải quyết vấn đề.
Có ai biết về các thay đổi đối với mục tiêu-c giữa OS 2.2.1 và 3.0 không? Có tài liệu nào cho những thay đổi này không?
API changes document dường như không chứa bất kỳ điều gì về vấn đề này.
EDIT
lỗi xảy ra khi bạn cố gắng truy cập thuộc tính, ví dụ:
NSArray *anArray = myClass.myArray;
Như tôi đã đề cập ở trên, tôi đã tìm thấy cách giải quyết cho vấn đề này: viết phương pháp getter, tuy nhiên những gì tôi thực sự là tài liệu từ táo giải thích thay đổi này và bất kỳ thay đổi nào khác không liên quan đến API .
Nhờ sự giúp đỡ của bạn
Xin chào Chris. Trên thực tế tôi đã chỉ định toàn bộ mã có liên quan, hơn nữa đề xuất của bạn cho chỉ đọc, sao chép tài sản không thực hiện bất kỳ ý nghĩa và tôi nghi ngờ trình biên dịch sẽ cho phép nó đi. Tôi tiếp tục cảm nhận được rằng mọi người không thực sự đọc những câu hỏi đó là một sự xấu hổ bởi vì tôi đã vui mừng về trang web này trong khoảng ba ngày. Và bạn đã không trả lời câu hỏi của tôi đó là lý do tại sao nó được sử dụng để làm việc và không phải là bây giờ, và trỏ đến một số tài liệu từ táo về nó. –
Ron, bạn chỉ cần khai báo biến không phải là khai báo ivar trong một @interface. Hơn nữa, (chỉ đọc, sao chép) sẽ hoạt động và hoàn toàn hợp lý: Nó nói rằng thuộc tính sử dụng kiểu "copy" của quản lý bộ nhớ, và trong lớp này là chỉ đọc. (Một phân lớp có thể ghi đè điều đó.) Cuối cùng, tôi nhớ rằng nó hoạt động trước iPhone OS 3.0 SDK và không hoạt động trong iPhone OS 3.0 SDK đặc biệt do lỗi trình biên dịch. Bạn có thể đọc "Ngôn ngữ lập trình 2.0 mục tiêu-C" để xem hành vi của ngôn ngữ nên là gì. –
Ron, những gì bạn đăng trong câu hỏi chắc chắn không phải là mã thực tế bạn đang sử dụng, vì có lỗi cú pháp trong đó sẽ ngăn nó biên dịch (dòng đầu tiên yêu cầu dấu chấm phẩy). Những gì Chris đoán là điều duy nhất hợp lý, nếu bạn đang làm điều gì đó thực sự kỳ lạ, bạn cần phải đăng mã thực tế. –