2012-10-13 31 views
5

Tôi đang làm việc với Dữ liệu cốt lõi và cố gắng làm cho dữ liệu hiển thị dữ liệu bằng một mô hình dữ liệu đơn giản. Các tai nạn ứng dụng và mang lại cho tôi thông báo lỗi nàyDữ liệu chính cho lỗi

Chấm dứt ứng dụng do ngoại lệ còn tự do 'NSInvalidArgumentException', lý do: '+ entityForName: nil không phải là một tham số NSManagedObjectContext pháp tìm kiếm tên của thực thể 'Nhắc nhở''

Tôi không hoàn toàn chắc chắn nhưng làm thế nào tôi lấy nó là nó nói rằng nó không thể tìm thấy thực thể của tôi được gọi là Nhắc nhở? Tuy nhiên, tôi thực tế có một thực thể gọi là Nhắc.

Tôi cũng đặt breakpoint và nó dừng lại ngay tại đây: enter image description here

Bất kỳ trợ giúp sẽ được đánh giá rất nhiều. Hoàn toàn chết.

Managed đang bối cảnh trong App Đại biểu .m

enter image description here

+0

Ngữ cảnh đối tượng được quản lý của bạn là 0. Tôi cho rằng đó là một cái ngà ... Nó chưa được đặt cho bất cứ thứ gì. –

+0

Cảm ơn bạn đã trả lời. Bạn có thể cho tôi biết cách tôi có thể khắc phục sự cố này không? – Zack

+0

Thật không may, hoặc tôi đã đặt nó vào một câu trả lời. Bạn cần thêm nhiều mã hơn, không có đủ thông tin ở đây. Ở đâu trong bộ điều khiển xem của bạn, bạn thiết lập ivar managedObjectContext? –

Trả lời

1

Vấn đề ở đây là accessor của bạn và Ivar của bạn có cùng tên. Đó là nơi quy ước Ivar dưới chân đến từ. Ở đây, bạn không sử dụng accessor để truy cập thuộc tính của bạn, bạn đang sử dụng biến sao lưu trực tiếp, vì vậy nó không bao giờ được khởi tạo. Thay vào đó, hãy chắc chắn rằng bạn luôn luôn đi qua các phương pháp accessor của bạn và bạn sẽ không có một vấn đề. Vì vậy, viết lại phương pháp vi phạm (và bất kỳ người khác sử dụng các managedContextObject tài sản với một cái gì đó như sau:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; // it's good practice to call the super methods, even if you're fairly certain they do nothing 

    // Get a reference to the managed object context *through* the accessor 
    NSManagedObjectContext* context = [self managedObjectContext]; 

    // From now on, we only use this reference in this method 
    NSFetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription* entity = [NSEntityDescription entityForName:@"Remind" inManagedObjectContext:context]; // <- use the local reference we got through the accessor 
    [request setEntity:entity]; 
    NSError* error = nil; 
    NSArray* array = [context executeFetchRequest:request error:&error]; 
    if(!array) { 
    // Do something with the error 
    NSLog(@"Error Fetching: %@", error); 
    } 
    [self setDesitnationsArray:[array mutableCopy]]; 
    [destinationsTableView reloadData]; 
} 

Bạn có thể muốn thay đổi ivars của bạn để một cái gì đó bạn sẽ không bị cám dỗ để sử dụng hoặc sẽ được ngay lập tức rõ ràng rằng bạn chưa trải qua các accessors, như _managedObjectContext hoặc thậm chí _privateContext hoặc bất cứ điều gì sẽ dính vào bạn cho đến khi bạn quen với việc truy cập các thuộc tính thông qua các accessors. có thể sử dụng cú pháp chấm, nhưng bạn phải luôn luôn nhớ để đi qua self, ví dụ, self.managedObjectContext.Tôi không thích phương pháp này khi mọi người quên rằng nó không phải là một truy cập tài sản trực tiếp và nó đang sử dụng accessors, vì vậy họ nghĩ rằng có thể trao đổi cú pháp chấm cho một truy cập trực tiếp, khi nó không giống như trong trường hợp của bạn.

+0

Cảm ơn bạn đã trả lời. Tuy nhiên tôi đã thay đổi mã ở trên để sau đây như bạn có và nó vẫn cho tôi những lỗi tương tự không may. – Zack

+0

@zack, lấy nó từ đại biểu ứng dụng của bạn sau đó. Vấn đề của bạn là ivar của bạn là không, và đó là một lỗi. Bạn không thực sự có một tham chiếu đến một bối cảnh đối tượng được quản lý trong phương thức đó. –

+0

@JasonCoco Tôi có cùng một vấn đề. ngữ cảnh là không trong trường hợp của tôi. Bạn có thể vui lòng cho tôi biết cách lấy nó từ App Delegate không? –

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