2014-09-09 20 views
5

Trong Mô hình CoreData Tôi có một thực thể được gọi là TestEntity. Thực thể này có một thuộc tính duy nhất có tên 'deleted' có kiểu boolean.lớp con được tạo tự động của NSManagedObject cho thuộc tính boolean gây ra cảnh báo

Nếu tôi tạo ra một lớp con NSManagedObject tự động cho tổ chức này sử dụng Xcode, header lớp được tạo ra trông như thế này:

@interface TestEntity : NSManagedObject 

@property (nonatomic, retain) NSNumber * deleted; 

@end 

Tôi hiểu tại sao NSNumber được sử dụng cho một thuộc tính boolean. Điều này đã không thay đổi từ trước. Vấn đề là nó bây giờ chỉ cho tôi 2 cảnh báo:

  1. getter thuộc tính trên tài sản 'xóa' không phù hợp với các tài sản được thừa kế từ 'NSManagedObject'.
  2. Loại thuộc tính 'NSNumber *' không tương thích với loại 'BOOL' (còn gọi là 'bool') được kế thừa từ 'NSManagedObject'.

Tôi không muốn sử dụng các loại nguyên thủy. Bất kỳ ý tưởng làm thế nào để thoát khỏi những cảnh báo này? Đây có thể là lỗi với Xcode 6 beta 7 (iOS 8 beta 5) mà tôi đang sử dụng. Đã nộp báo cáo lỗi vì lớp được tạo tự động bằng Xcode sẽ không dẫn đến cảnh báo trình biên dịch trong mọi trường hợp.

Trả lời

8

Bạn đã quản lý để sử dụng thuộc tính có tên xung đột với các phương pháp NSManagedObject hiện có.

Giải pháp: Thay đổi tên thuộc tính. Đừng gọi nó là "xóa" nhưng cái gì khác.

2

Tôi đã đi đến tập tin tiêu đề NSManagetObject và có vẻ như Apple đang sử dụng nó theo cách này.

// state - methods can be used through KVC, for example for enabling/disabling widgets based on the state of the object 
@property (nonatomic, getter=isInserted, readonly) BOOL inserted; 
@property (nonatomic, getter=isUpdated, readonly) BOOL updated; 
@property (nonatomic, getter=isDeleted, readonly) BOOL deleted; 

Chỉ cần thay đổi tên thuộc tính của tổ chức của bạn và dự đoán của tôi sẽ không phải là trọng lượng nhẹ. Đảm bảo kiểm tra điều này trước khi gửi mã của bạn.

Tôi không biết liệu Apple có thực hiện điều này hay không nhưng tôi đã không nhận được Cảnh báo trong iOS 7. Hãy hy vọng rằng đây là tín hiệu từ Apple cho chúng tôi biết rằng họ đang sửa tất cả các vấn đề về Dữ liệu chính :)

+0

"Tôi không biết nếu Apple chỉ làm điều này nhưng tôi đã không nhận được một cảnh báo trong iOS 7. Hãy hy vọng rằng đây là một tín hiệu từ Apple cho chúng tôi biết rằng họ đang sửa chữa tất cả các vấn đề dữ liệu cốt lõi :)". Không, họ đã thay đổi chúng thành các thuộc tính từ các phương thức chỉ đọc, đó là lý do tại sao bạn nhận được lỗi. Điều này xảy ra trên nhiều khuôn khổ, không chỉ là Dữ liệu cốt lõi. – quellish

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