1. ホーム
  2. iphone

[解決済み] Coredata Error "data: <障害>"

2022-10-15 12:14:10

質問

以下のコードで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を以下のように変更するまでは、全く問題なく動作していました。

Cave.hでMKAnnotationをdelegateとして追加し、Cave.mで以下のコードを追加しました。

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

これをデバッグする方法はあるのでしょうか?

どのように解決するのですか?

これは予想された動作です。オブジェクトの永続的な値にアクセスする必要があるまで、コアデータは完全なオブジェクトを返しません。返される各オブジェクトは、この時点までは「障害」です。

を使うと、フェッチ・リクエストが完全なオブジェクトを返すように強制することができます。 [request setReturnsObjectsAsFaults:NO] を使って強制的にオブジェクトを返すことができますが、ほとんどの場合、あなたが持っているものは大丈夫でしょう。より多くの情報のためにNSFetchRequestのドキュメントを見てください。

プロパティの1つにアクセスすると、コアデータは永続ストアに移動して残りの値を取得し、その後、ログに完全な説明が表示されます。

これはよくある誤解のようなので、それについて書いてみることにしました。 ここで .