Coredata Error "data: <fault>"


107

Aşağıdaki kodla CoreData'dan veri çekmeye çalışıyorum

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, 9 eşleşen nesneye sahip olmalıdır ve 9 nesneyi bulur. Yani yüklem çalışmalı ama bunu konsolda alıyorum

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>)"
)

Varlık olan Cave.m'de aşağıdaki değişikliği yapana kadar mükemmel bir şekilde çalışıyordu.

MKAnnotation'ı Cave.h'de delege olarak ekledim ve bu kodu Cave.m'ye ekledim.

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

Bunda hata ayıklamanın bir yolu var mı?

Yanıtlar:


273

Bu beklenen bir davranıştır, nesnelerin kalıcı değerlerine erişmeniz gerekene kadar çekirdek veriler tam nesneler döndürmez. İade ettiğiniz nesnelerin her biri bu noktaya kadar bir 'hata' olacaktır.

Getirme isteğini kullanarak tam nesneleri döndürmeye zorlayabilirsiniz [request setReturnsObjectsAsFaults:NO], ancak çoğu durumda sahip olduğunuz şey iyi olacaktır. Daha fazla bilgi için NSFetchRequest belgelerine bakın.

Özelliklerden birine erişirseniz, temel veriler kalıcı depoya gider ve değerlerin geri kalanını alır, ardından günlüklerde tam açıklamayı alırsınız.

Bu o kadar yaygın bir yanlış anlaşılma gibi görünüyor ki, burada yazmaya karar verdim .


57
[request setReturnsObjectsAsFaults: NO] 'u çağırarak özelliği kapatabilirsiniz;
Qamar Suleiman

21
Hata kafa karıştırıcı, 'veri alınmadı' veya başka bir şey
diyebilirlerdi

1
Hata, bilgisayar bilimi mimarisinde kullanılan genel bir anahtar kelimedir
Abhishek Bedi

@AbhishekBedi hayır değil. Bu, özellikle Core Data tarafından normal sözlük tanımından farklı bir anlama gelmek için kullanılan "özel" bir kelimedir. Kesinlikle kötü adlandırma.
Carson Holzheimer

4

CoreData'dan veri çekerken de aynı problemle karşılaştım! Ben de @jrturton'un anlattığı yolu takip ettim ve Swift 3'te uyguladım :

1. Adım: Ekle import CoreData

Adım 2: Aşağıdaki kodu ekleyin. .

let context = ( UIApplication.shared.delegate as! AppDelegate ).persistentContainer.viewContext
var request = NSFetchRequest<NSFetchRequestResult>()
request = Your_Entity_Name.fetchRequest()
request.returnsObjectsAsFaults = false
do {
    let arrayOfData = try context.fetch(request)
} catch {
    // Handle the error! 
}

Umarım sana yardımcı olur. :)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.