2012-05-18 20 views
10

Ok vì vậy đây là lỗi tôi nhận được'NSInternalInconsistencyException', lý do: "Foo" không phải là một lớp con của NSManagedObject

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '"Place" is not a subclass of NSManagedObject.' 

Tôi cho rằng những gì nó có nghĩa là rằng 'Đặt' vẫn chưa được được thêm dưới dạng thực thể vào mô hình dữ liệu lõi ??? Nhưng nó đã được thể hiện bằng hình ảnh dưới đây.

Tôi đoán rằng giả định của tôi là không chính xác mặc dù vậy bất kỳ trợ giúp hoặc ý tưởng nào sẽ tốt đẹp.

Tôi khá chắc chắn rằng đây là dòng đó gây ra nó:

NSManagedObject* place = [NSEntityDescription 
           insertNewObjectForEntityForName:@"Place" 
           inManagedObjectContext:context]; 
+0

Ngữ cảnh có hợp lệ không khi bạn thực hiện dòng đó? (Không phải, có kết nối với điều phối viên cửa hàng liên tục ....) –

Trả lời

23

Nếu bạn không sử dụng các lớp tùy chỉnh (không Nơi [hm].), Như âm thanh như bạn không, kiểm tra Entity tab, và chắc chắn rằng Lớp tên là trống (= NSManagedObject) - không Nơi.

+0

Vô địch! Tôi không nhớ đã chạm vào điều đó. Điều gì sẽ khiến nó thay đổi? – user1135469

+0

Đoán của tôi là một phân lớp cho thực thể thực sự là mặc định. – paulmelnikow

+0

Cảm ơn @noa :) u đã tiết kiệm thời gian cho tôi .. – Rupesh

-1

Cách khác để giải quyết vấn đề này là thực sự sử dụng lớp con NSManagedObject (được khuyến nghị).

Place *place = [NSEntityDescription 
          insertNewObjectForEntityForName:@"Place" 
          inManagedObjectContext:context]; 
+0

Đặt một lớp con của NSManagedObject sẽ yêu cầu một cách tiếp cận khác với điều này. Thay đổi loại biến sẽ không ảnh hưởng đến lớp của đối tượng. – paulmelnikow

+0

Không, không. Như đã được chỉ ra, nó là mặc định và do đó được đề nghị. Đó là, ví dụ, an toàn hơn nhiều bằng cách sử dụng tên thuộc tính rõ ràng hơn so với các thuộc tính truy cập thông qua mã hóa khóa-giá trị. – Mundi

12

Tôi gặp vấn đề tương tự với các lớp được gọi là Thông báo và kết nối. Lỗi vừa xuất hiện sau khi thêm cơ sở gửi email bằng thư viện MessageUI. Tôi tin rằng cuộc xung đột xảy ra vì thư viện sẽ có các lớp có tên là Message and Connection, do đó chúng không được coi là lớp con của NSManagedObject. Thay đổi tên của chúng bằng cách thêm tiền tố (trong trường hợp của tôi với dấu X) làm cho các thực thể trở nên độc đáo. Tôi dự định tiền tố tất cả các thực thể của mình trong tương lai để ít có cơ hội xung đột nảy sinh.

+1

Doh, tìm tốt. Đã có một thực thể tên là Tin nhắn đã ném cái chết này. –

+0

Tôi đã có cùng một vấn đề chính xác, với một lớp có tên 'Kết nối'. Tiền tố tên làm việc tuyệt vời, cảm ơn. –

0

Điều đầu tiên cần làm khi bạn gặp phải loại lỗi là để xác minh tên lớp của tổ chức của bạn:

  • mở XCDataModel
  • Chọn thực thể của bạn
  • Mở cửa sổ bên phải Utilities
  • Nhấp vào nút "hiển thị thanh tra mô hình dữ liệu"
  • Xác minh tên lớp sao cho tên lớp được đồng bộ với mô hình được tạo của bạn

Hy vọng điều này sẽ hữu ích!

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