Fault cannot be fulfilled
今イチ理解してないけど。
「NSObjectInaccessibleException Fault cannot be fulfilled 〜」とエラーが出されて何のこっちゃと思ってたら、どうも、NSManagedObject を作成中にクラッシュなどして、commitされずに放置されたエンティティにアクセスした時に怒るみたい。
例えば関連エンティティ作成中にabortした時、次からその関連エンティティにアクセスしても、上記のようなエラーが出ます。
んじゃどうすっぺという訳で、つまりは中途半端に作成した NSManagedObject を破棄してやればいいだけの話。
ManageObjectA のエンティティ
- relateA: Relation for A. Many to one.
RelateA のエンティティ
- f: NSString
- MOA: Relation for ManageObjectA. one To Many.
ManageObjectA と A は多対一。
// ManageObjectA のカテゴリークラス // self.relateA にアクセス - (RelateA) relationA { if ([self hasFaultForRelationshipNamed:@"relateA"]) { // ヌッコ割れてたので、nilを返す。 return nil; } return self.relateA; }
上には書いてませんが、壊れている RelateA は削除するようにしてやって下さい。
もし RelateA だけを NSFetchRequest で取ってくる場合、中には壊れた子が混じっている事になります。その場合は下のような確認コードが必要になりますよっと。
// NSFetchRequest で取得 NSArray* arr = [self.managedObjectContext executeFetchRequest:request error:&err]; for (RelateA* a in arr) { if ([a isFault]) { [self.managedObjectContext deleteObject:a]; } } // 再度取得?