2012-09-20 16 views
25

Sau khi cập nhật lên phiên bản của Xcode 4.5 cho iOS6 đêm qua mới nhất, tôi nhận được cảnh báo và lỗi như thế này@property tự động tổng hợp không làm việc trên NSManagedObject lớp con

tài sản 'mapAnnotation' đòi hỏi phương pháp 'mapAnnotation' to be định nghĩa - sử dụng @synthesize, @dynamic hoặc cung cấp một phương pháp thực hiện trong việc thực hiện lớp này

vì thiếu báo cáo @synthesize, và thậm chí cả lỗi về Ivars biết nếu tôi sử dụng chúng. Điều này là, tôi nghĩ không cần thiết phải viết các câu lệnh @synthesize này kể từ lần cập nhật Xcode cuối cùng lên 4.5 mà đã xuất hiện với Mountain Lion, VÀ tất cả các dự án của tôi làm việc mà không có chúng trước khi tôi cập nhật Xcode tối qua (tôi đã xóa một bó toàn bộ báo cáo @synthesize từ các tập tin của tôi trở lại sau đó) Nó thậm chí còn vẫn còn trong Release-Ghi chú:

• Objective-C @synthesize lệnh được tạo ra theo mặc định khi sử dụng tài sản.

Vì vậy, tôi đang bối rối, tôi thiếu một Dự án mới Thiết lập có thể tự động tạo @synthesize?

Nhưng nó thậm chí không hoạt động khi tôi tạo một dự án mới và thử nó

+0

Tôi gặp vấn đề tương tự. Có vẻ như nó không hoạt động trên nsmanagedobject. – Devfly

+0

Tôi cũng vậy! Bất cứ ai tìm thấy một sửa chữa chưa? – Marky

+1

@ Devfly, tôi đã không nhận ra điều này lúc đầu nhưng bạn là đúng, có vẻ như chỉ không làm việc trên NSManagedObject và lớp con của nó. – MeXx

Trả lời

35

Tôi phải đối mặt với cùng một vấn đề và tìm ra lý do và giải pháp.

Nếu bạn xem tệp tiêu đề của NSManagedObject trong SDK iOS 6, bạn sẽ thấy "NS_REQUIRES_PROPERTY_DEFINITIONS" buộc các lớp chỉ định @dynamic hoặc @synthesize cho thuộc tính.

(Bạn có thể xem NS_REQUIRES_PROPERTY_DEFINITIONS trong diff API giữa iOS 5.1 và iOS 6.0.)

Điều này là do trình biên dịch phải biết nếu bạn muốn có một tài sản là động hoặc tổng hợp đặc biệt là trong việc thực hiện một lớp con của lớp NSManagedObject.

Tôi có thể giải quyết vấn đề này đơn giản bằng cách thêm các dòng @synthesize một cách rõ ràng cho các thuộc tính khác ngoài @dynamic trong lớp con NSManagedObject.

+3

Tôi đã nhận được câu trả lời từ sự hỗ trợ dev của Apple, về cơ bản những gì bạn nói: "DNAnnotation là hậu duệ của NSManagedObject, áp đặt một hạn chế khi tổng hợp tự động các thuộc tính. NSManagedObject yêu cầu tất cả các thuộc tính được định nghĩa trong các lớp con của nó phải được tổng hợp một cách rõ ràng Bạn sẽ cần phải thêm một (at) tổng hợp hoặc (at) tuyên bố động thích hợp cho thuộc tính mapAnnotation. " – MeXx

+0

Điều này cũng xảy ra với CMMotionManager, không có bất kỳ NS_REQUIRES_PROPERTY_DEFINITIONS nào trong tệp tiêu đề của nó ... – cfischer

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