2010-07-27 25 views
20

Đây là mã cho toggleAddProject, mã Dữ liệu chính gần như giống như trong mẫu CoreDataBooks của Apple, tuy nhiên khi tôi nhấp vào nút thêm, ứng dụng gặp sự cố với entityForName: could not locate an NSManagedObjectModel for entity name 'Project' trên dòng bắt đầu với newProjectController.projectkhông thể định vị một NSManagedObjectModel cho tên thực thể

-(IBAction)toggleAddProject 
{ 
    NewProjectViewController *newProjectController = [[[NewProjectViewController alloc] initWithStyle:UITableViewStyleGrouped] autorelease]; 

    // Create a new managed object context for the new project -- set its persistent store coordinator to the same as that from the fetched results controller's context. 
    NSManagedObjectContext *addingContext = [[NSManagedObjectContext alloc] init]; 
    self.addingManagedObjectContext = addingContext; 
    [addingManagedObjectContext setPersistentStoreCoordinator:[[fetchedResultsController managedObjectContext] persistentStoreCoordinator]]; 
    newProjectController.project = (Project *)[NSEntityDescription insertNewObjectForEntityForName:@"Project" inManagedObjectContext:addingContext]; 
    [addingContext release]; 


    UINavigationController *addNewNavigationController = [[UINavigationController alloc] initWithRootViewController:newProjectController]; 
    [self.navigationController presentModalViewController:addNewNavigationController animated:YES]; 
    [addNewNavigationController release]; 
} 

Mọi thứ đã được tổng hợp, thực thể Dự án tồn tại. Tôi không thể hiểu tại sao nó bị treo. Hầu hết mọi người dường như để có thể khắc phục lỗi này bằng cách chèn đoạn mã sau hoặc trong các phương pháp riêng của mình, hoặc trong viewDidLoad:

if (managedObjectContext == nil) 
{ 
    managedObjectContext = [(CoreDataBooksAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
} 

Khi sửa đổi cho đại biểu ứng dụng của tôi nó làm cho không có sự khác biệt. Cảm ơn vì bất kì sự giúp đỡ.

Trả lời

40

Lỗi này chỉ có một vài nguồn có thể:

  1. Typo trong tên Entity.
  2. Nil đối tượng bối cảnh đối tượng được quản lý.
  3. Không thêm mô hình chứa thực thể vào lưu trữ liên tục mà ngữ cảnh sử dụng.
  4. Không thêm đúng cửa hàng liên tục vào chính bối cảnh đó.
+0

Tôi đã kết thúc việc tiếp cận sự khác biệt này và lỗi này hiện không xuất hiện. Nhưng cảm ơn anyway, không có lỗi chính tả trong mã của tôi nhưng tôi chắc chắn nó là một trong những thứ khác mà bạn đã liệt kê, rất có thể là moc là nil. – ChrisJP

+0

4. là vấn đề trong trường hợp của tôi –

2

Tài liệu của Apple cung cấp một số thông tin tốt về gỡ lỗi lỗi entityForName: could not locate an NSManagedObjectModel for entity name 'Foo'.

Xem phần this trong Hướng dẫn lập trình dữ liệu cốt lõi.

+1

Vâng tôi đã xem xét điều này nhưng chưa thể giải quyết được vấn đề, do đó tôi đăng bài ở đây. – ChrisJP

+1

Welp, có một upvote cho xem xét các tài liệu rồi. :) – jergason

3

Sử dụng trình gỡ lỗi và xác nhận rằng mô hình của bạn không phải là số không. Đó là nguyên nhân phổ biến nhất của lỗi này. Nếu nó không phải là nil thì hãy tìm một lỗi đánh máy trong tên thực thể.

1

Ok tôi cũng gặp vấn đề này và tôi đã giải quyết nó một cách tương tự. Mã ban đầu đã được đưa ra như:

Event *event = (Event *)[NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:managedObjectContext]; 

Mặc dù mã ngắn gọn nó có vẻ như trình gỡ lỗi không thể hiển thị thông tin chi tiết về lỗi ở đâu kể từ khi bạn đều tạo và cấu hình một trường hợp mới của 'tổ chức sự kiện 'thực thể (hoặc bất kỳ thực thể nào của bạn được đặt tên).

Thay vào đó tôi nổ ra này thành ba dòng và trình gỡ lỗi hiển thị nhiều thông tin:

Event *event = [[NSManagedObject alloc] init]; 
NSManagedObjectContext *moc = [self managedObjectContext]; 
event = [NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:moc]; 

tôi thấy tôi đã không được thiết lập Type chính xác cho một trong những thuộc tính và tôi đã có một lỗi đánh máy trong mã của tôi , tất cả những gì trình gỡ rối chỉ ra.

23

Tôi gặp sự cố này khi tôi có một số khác nhau NSManagedObjectContext s. Cách nhanh chóng để gỡ lỗi nó là kiểm tra các bit kết nối khác nhau và đảm bảo thực thể của tôi được liệt kê trước khi gọi ngữ cảnh.

NSLog(@"Context: %@",context); 
NSLog(@"PS Coord : %@",context.persistentStoreCoordinator); 
NSLog(@"MOM : %@", context.persistentStoreCoordinator.managedObjectModel); 
NSLog(@"Entities : %@",[[context.persistentStoreCoordinator.managedObjectModel entities] valueForKey:@"name"]); 
+2

Cho đến nay giải pháp tốt nhất để tìm ra vấn đề. Điều này chỉ giúp tôi tìm ra rằng persistentStoreCoordinator của tôi không được nối đúng cách. – ArtSabintsev

+1

Bingo !! Tôi chưa giải quyết được vấn đề của mình, nhưng điều này chắc chắn dẫn tôi đến con đường bên phải. – Rickster

-1

TechZen là điểm trên ... trong trường hợp của tôi là # 4. Đi qua các bước trong liên kết sau và điều này sẽ giúp bạn thêm các phương thức CoreData thích hợp vào một dự án hiện có và nhận mọi thứ được thiết lập chính xác để bạn không gặp phải lỗi bạn đang gặp phải.

Adding Core Data To Existing iPhone Projects

+0

Có 404 tài nguyên này ... –

+1

Đây là liên kết hoạt động: http://wiresareobsolete.com/wordpress/2009/12/adding-core-data-existing-iphone-projects/ –

0

Trong quá trình phát triển, tôi không thể tìm thấy đối tượng mà tôi đã thêm sau này. Điều gì đã hiệu quả đối với tôi: (Về cơ bản là một mẹo cơ bản)

Gỡ cài đặt ứng dụng MERYI THỜI GIAN bạn thay đổi Mô hình Dữ liệu!

Mô hình dữ liệu được lưu trong bộ nhớ cache bởi Dữ liệu cốt lõi giữa các lần cài đặt, để đảm bảo tính toàn vẹn vẫn giữ nguyên. Xóa ứng dụng khỏi trình mô phỏng/iPhone để có thể kiểm tra các thay đổi của bạn.

PS: có ai biết cách tự động làm điều đó không?

+0

Bạn phải sử dụng di chuyển nhẹ để giải quyết vấn đề này. Đây là một bài đăng trên blog ngắn giải thích điều này: http://blog.the-nerd.be/2012/02/how_to_do_a_lightweight_core_data_migration/ Đây là bài đăng blog chi tiết hơn: http://www.raywenderlich.com/27657/how-to -perform-a-lightweight-core-data-migration –

+0

"Mỗi khi bạn cập nhật nội dung nào đó trong mô hình của mình, bạn cần phải tạo phiên bản mới". Ừ .. không. Tôi muốn xóa một hiện có trên thiết bị mỗi lần (trong quá trình phát triển ban đầu). Bằng cách này, tôi không phải suy nghĩ về sự thay đổi mà tôi vừa tạo ra là đủ nhẹ. Bằng cách này, tôi có một quy trình làm việc _always_ hoạt động. –

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