9

Tôi khá thành thạo trong CoreData và đã sử dụng nó trong vài năm với rất ít hoặc không có khó khăn. Đối với cuộc sống của tôi, tôi không thể tìm ra lý do tại saoinsertNewObjectForEntityForName: inManagedObjectContext: return NSNumber bug?

insertNewObjectForEntityForName:inManagedObjectContext: 

là sự trở lại đột ngột của một số trường hợp lạ của NSNumber. GDB nói đối tượng quay trở lại là của lớp con tùy chỉnh đúng NSManagedObject, nhưng khi tôi đi đến in một mô tả về NSManagedObject bản thân, tôi nhận được lỗi sau:

*** -[NSCFNumber objectID]: unrecognized selector sent to instance 0x3f26f50 

gì thậm chí người lạ, là tôi có thể để thiết lập một số mối quan hệ và thuộc tính bằng setValue: forKey: và tất cả đều tốt. Nhưng khi tôi cố gắng thiết lập một mối quan hệ cụ thể, tôi nhận được lỗi này:

*** -[NSCFNumber entity]: unrecognized selector sent to instance 0x3f26f50 

Tôi đã thử tất cả mọi thứ từ sạch tất cả các mục tiêu, để khởi động lại cả mac và iPhone, thậm chí chỉnh sửa các mô hình để các mối quan hệ trong câu hỏi là thay cho nhiều người. Không có vấn đề gì tôi làm, cùng một vấn đề xuất hiện. Có ai từng thấy bất cứ điều gì như thế này trước đây không?

+2

Xin vui lòng, cung cấp nhiều mã – Skie

+0

Bạn đã bao giờ kết thúc figuring this out? – makdad

Trả lời

0

Bộ chọn đối tượng và đối tượng là trên NSManagedObject, không phải NSCFNumber (hoặc NSNumber). Tôi sẽ không mong đợi bạn gọi một trong hai bộ chọn này trên số NSNumber phải là thuộc tính trên thực thể chứ không phải là thực thể.

Mọi thực thể trong CoreData phải mở rộng NSManagedObject, vì vậy đối tượng NSCFNumber của bạn không phải là một thực thể.

1

Tôi gặp vấn đề tương tự và sau khi kéo tóc ra cả ngày, tôi đã giải quyết được vấn đề của mình.

Tôi tin rằng sự cố có liên quan đến thuộc tính/mối quan hệ bị hỏng và NSCFNumber thực sự đang tìm đối tượngID cho thuộc tính/mối quan hệ đó. Trong trường hợp của tôi, tôi có thể sử dụng valueForKey: để tìm tất cả các thuộc tính/mối quan hệ, mặc dù mối quan hệ tôi đã gọi là "tệp" dường như bị hỏng. Cuối cùng tôi nhận ra rằng tôi đã mở rộng NSObject để bao gồm một phương thức "isFile" boolean, và bằng cách nào đó điều này đã can thiệp vào CoreData và làm cho nó trả về một đối tượng tham nhũng hoặc không thể xử lý đúng với đối tượng mà nó có . Tôi đoán là CoreData phải tự động tạo các phương thức "isXXX".

Tôi có thể khắc phục sự cố bằng cách xóa phương thức isFile hoặc bằng cách đổi tên thuộc tính của tôi.

14

Tôi có cùng một vấn đề: Tôi đã thêm một phương thức gọi là "isDatabase" (trả về BOOL) cho thực thể cha của thực thể Cơ sở dữ liệu của tôi, có mối quan hệ có tên "cơ sở dữ liệu". Đổi tên "isDatabase" thành "isOfTypeDatabase" đã khắc phục sự cố. Vì vậy, hãy tiếp tục tìm kiếm trong các thực thể cha mẹ!

+0

Bạn vừa lưu cho tôi khả năng ** giờ ** của sự thất vọng và Googling. Nếu tôi có thể bỏ phiếu cho câu trả lời này một nghìn lần tôi sẽ làm. Cảm ơn ngài! – Russ

+0

OMG! Đã có cùng một vấn đề, không thể sử dụng "is " ngay cả trong một danh mục! Đổi tên phương pháp của tôi để một cái gì đó khác cố định nó! Cảm ơn rất nhiều: D! – KBog

2

Tôi đã xác định thuộc tính trên một lớp con NSManagedObject va chạm với tên của mối quan hệ được xác định trên lớp.

Dưới đây là mã trong tôi MyManagedObjectSubclass+Custom.h

@property (readonly, nonatomic) BOOL isSeason;

Dưới đây là đoạn mã được tạo ra bởi XCode cho MyManagedObjectSubclass.h

@property (nonatomic, retain) SomeOtherEntityToOneRelationship *season;

Lưu ý rằng isSeason, bởi KVC, sẽ va chạm với tên mùa