2011-09-05 26 views
95

tôi cố gắng kéo ra dữ liệu từ CoreData với đoạn mã sauCoreData Lỗi "dữ liệu: <fault>"

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
request.entity = [NSEntityDescription entityForName:@"Cave" inManagedObjectContext:self.context]; 
request.predicate = [NSPredicate predicateWithFormat:@"(latitude > 0) AND (longitude > 0)"]; 

NSError *error; 
NSLog(@"%@",[self.context executeFetchRequest:request error:&error]); 
NSLog(@"%@",[error localizedDescription]); 

CoreData nên có 9 đối tượng phù hợp và nó tìm thấy 9 đối tượng. Vì vậy, các vị nên làm việc nhưng tôi có được điều này trong giao diện điều khiển

2011-09-05 07:41:42.267 CaveConditions[6930:11903] (
    "<NSManagedObject: 0x7368060> (entity: Cave; id: 0x7367880 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p31> ; data: <fault>)", 
    "<NSManagedObject: 0x73547e0> (entity: Cave; id: 0x7356e20 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p40> ; data: <fault>)", 
    "<NSManagedObject: 0x73681e0> (entity: Cave; id: 0x7363e60 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p42> ; data: <fault>)", 
    "<NSManagedObject: 0x7368280> (entity: Cave; id: 0x7356be0 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p72> ; data: <fault>)", 
    "<NSManagedObject: 0x7368320> (entity: Cave; id: 0x733ad80 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p73> ; data: <fault>)", 
    "<NSManagedObject: 0x73683c0> (entity: Cave; id: 0x7333e70 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p91> ; data: <fault>)", 
    "<NSManagedObject: 0x7368480> (entity: Cave; id: 0x7361810 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p101> ; data: <fault>)", 
    "<NSManagedObject: 0x7368570> (entity: Cave; id: 0x7360110 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p105> ; data: <fault>)", 
    "<NSManagedObject: 0x7368610> (entity: Cave; id: 0x73303c0 <x-coredata://C825FC9D-3490-4D8A-A811-979B819A2EB6/Cave/p112> ; data: <fault>)" 
) 

Nó được sử dụng để làm việc prefectly tốt cho đến khi tôi đã thay đổi sau trong Cave.m là Entity

tôi thêm MKAnnotation như một đại biểu trong Cave.h và thêm mã này vào Cave.m

- (CLLocationCoordinate2D)coordinate 
{ 
    CLLocationCoordinate2D location; 
    location.latitude = [self.latitude doubleValue]; 
    location.longitude = [self.longitude doubleValue]; 
    return location; 
} 

Có cách nào để gỡ lỗi này không?

Trả lời

244

Hành vi này được mong đợi, dữ liệu lõi sẽ không trả lại đối tượng đầy đủ cho đến khi bạn cần truy cập các giá trị liên tục của đối tượng. Mỗi đối tượng trả về của bạn sẽ là 'lỗi' cho đến thời điểm này.

Bạn có thể buộc yêu cầu tìm nạp trả về các đối tượng đầy đủ bằng cách sử dụng [request setReturnsObjectsAsFaults:NO], nhưng trong hầu hết các trường hợp, những gì bạn có sẽ vẫn ổn. Xem tài liệu cho NSFetchRequest để biết thêm thông tin.

Nếu bạn truy cập một trong các thuộc tính, dữ liệu cốt lõi sẽ đi đến cửa hàng liên tục và tìm phần còn lại của giá trị, sau đó bạn sẽ có được mô tả đầy đủ trong nhật ký.

Điều này có vẻ là một sự hiểu lầm phổ biến mà tôi quyết định viết về nó, here.

+54

bạn có thể tắt thuộc tính bằng cách gọi [request setReturnsObjectsAsFaults: NO]; –

+1

Cảm ơn bạn! đó là dễ dàng :) – ElizaS

+1

bạn đời phao cứu sinh, cảm ơn! – Vlad

2

Tôi gặp phải sự cố tương tự trong khi kéo dữ liệu từ CoreData! Vì vậy, tôi đã làm theo hướng dẫn @jrturton và tôi đã thực hiện nó trong Swift 3.

Bước 1: Thêm import CoreData

Bước 2: Thêm mã dưới đây. .

let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 
var request = NSFetchRequest<NSFetchRequestResult>() 
request = Your_Entity_Name.fetchRequest() 
request.returnsObjectsAsFaults = false 
let arrayOfData = try context.fetch(request) 

Hy vọng nó sẽ giúp bạn. :)

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