Coredata 오류“data : <fault>”


107

다음 코드를 사용하여 CoreData에서 데이터를 가져 오려고합니다.

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 개의 일치하는 개체가 있어야하며 9 개의 개체를 찾습니다. 따라서 술어는 작동하지만 콘솔에서 얻습니다.

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

Entity 인 Cave.m에서 다음과 같은 변경을 수행하기 전까지는 완벽하게 작동했습니다.

MKAnnotation을 Cave.h에 델리게이트로 추가하고이 코드를 Cave.m에 추가했습니다.

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

이것을 디버깅하는 방법이 있습니까?

답변:


273

이는 예상되는 동작이며, 핵심 데이터는 객체의 영구 값에 액세스해야 할 때까지 전체 객체를 반환하지 않습니다. 반환 된 각 개체는이 시점까지 '결함'이됩니다.

를 사용하여 전체 객체를 반환하도록 가져 오기 요청을 강제 할 수 [request setReturnsObjectsAsFaults:NO]있지만 대부분의 경우 괜찮습니다. 자세한 내용은 NSFetchRequest 문서를 참조하십시오.

속성 중 하나에 액세스하면 핵심 데이터가 영구 저장소로 이동하고 나머지 값을 가져 오면 로그에 전체 설명이 표시됩니다.

이것은 내가 그것에 대해 쓰기로했다 것과 같은 일반적인 오해 것 같다 여기 .


57
[request setReturnsObjectsAsFaults : NO]를 호출하여 속성을 끌 수 있습니다.
Qamar Suleiman 2012

21
오류, 그들은 말했다 수있는 혼란의 데이터를 가져올 수 없습니다 '또는 뭔가
크리스티 Băluţă

1
오류는 컴퓨터 과학 아키텍처에서 사용되는 일반적인 키워드입니다
Abhishek 베디

@AbhishekBedi 아니 아니에요. Core Data에서 특별히 사용하는 "특별한"단어로 일반 사전 정의와 다른 의미를가집니다. 확실히 잘못된 이름입니다.
Carson Holzheimer

4

CoreData에서 데이터를 가져 오는 동안 동일한 문제에 직면했습니다! 그래서 @jrturton이 지시하고 Swift 3 에서 구현 한 방식을 따랐습니다 .

1 단계 : 추가 import CoreData

2 단계 : 아래 코드를 추가합니다. .

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! 
}

희망, 그것은 당신을 도울 것입니다. :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.