Tôi có một đối tượng Core Data, Account
, thể hiện dưới dạng một lớp con của NSManagedObject
:iOS - Mô hình dữ liệu cốt lõi xung đột với khung thư?
@interface Account : NSManagedObject
toàn bộ ứng dụng của tôi đã phát triển tốt, tuy nhiên, khi tôi thêm các MessageUI.framework
vì vậy tôi có thể nhận được một bộ điều khiển xem email soạn , tất cả các địa ngục phá vỡ lỏng lẻo. Các liên kết ứng dụng và biên dịch tốt, và chạy tốt. Cho đến khi, đó là, tôi bắt đầu giao tiếp với các đối tượng Account
trước đây của tôi. Sau đó, tôi bắt đầu nhận được những:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: '"Account" is not a subclass of NSManagedObject.'
*** First throw call stack:
(0x202b012 ... 0x2385)
libc++abi.dylib: terminate called throwing an exception
này một đặc biệt trong số đó là do:
// we need to insert a new account
Account *newAccount = [NSEntityDescription
insertNewObjectForEntityForName:[Account entityName]
inManagedObjectContext:self.managedObjectContext];
Bây giờ, tôi đoán rằng có một số lớp trong MessageUI.framework
gây ra xung đột, nhưng tôi có một vài câu hỏi:
- ứng dụng biên dịch và chạy tốt, không có tên thời gian biên dịch xung đột
- các thành phần khác trong framew ork có vẻ là tiền tố-không gian tên (ví dụ:
MFMailComposeViewController
), vì vậy tài khoản lý thuyết không phải làMFAccount
? - Tôi thậm chí không làm
#import <MessageUI/MessageUI.h>
hoặc#import <MessageUI/MFMailComposeViewController.h>
chặt chẽ hơn, sau này tôi kiểm tra và thấy không có định nghĩa củaAccount
, vì vậy tôi không chắc chắn tại sao các xung đột có thể sẽ được tải. - Để chắc chắn, tôi đã tạo lại các lớp Dữ liệu cốt lõi của mình và đặt lại tất cả cài đặt trình mô phỏng, vẫn không có súc sắc.
- Xóa khung khỏi dự án và thiết lập bản dựng ngay lập tức khắc phục sự cố.
Bạn đã thử đổi tên lớp con NSManagedObject chưa? – geraldWilliam
@geraldWilliam: Trong khi tôi cho rằng điều đó sẽ khắc phục tình trạng này, tôi không muốn đặt tên cho các mô hình của mình nếu không cần thiết. Tôi thực sự hỏi câu hỏi này bởi vì tôi muốn biết những gì tôi đang bỏ lỡ, vì tất cả các điều tra của tôi đã dẫn đến kết thúc chết, và nếu tình huống này hay cách khác như nó bao giờ bật lên, tôi muốn có thể giải quyết nó một cách nhanh chóng và trực giác. – Josh
Chắc chắn điều đó có ý nghĩa. Nó chỉ là khi tôi đã chạy vào một tình huống tương tự, nơi tôi đã đặt tên cho đối tượng quản lý của tôi phân lớp "Message", tôi chỉ đổi tên nó và vấn đề đã được giải quyết. Di chuyển về phía trước, tôi chỉ đặt tên cho tất cả các lớp con đối tượng được quản lý của tôi với một tiền tố để tránh vấn đề này. – geraldWilliam