0

私は私がこつを持っていると思った何かでボートを逃していて、ここの誰かが助けてくれることを望んでいました。

Xcodeバージョン4.4を使用しており、プロジェクトではCore Data、Storyboards、およびARCを使用しています。

私のプロジェクトには次の3つのエンティティがあります。

ここに画像の説明を入力してください

すべてがLivestockおよびNotesエンティティでうまく機能します。しかし、データをタクソノミーエンティティに保存しようとしても、何も起こりません。エラーは発生しませんが、データは保存されません。

フェッチされた結果に配列を使用しなくても大丈夫ですか?私の述語に基づいて、返されるオブジェクトは1つだけであると予想しているので、配列は必要ないと思いました。以下は、保存を行う私のコードです。ビューのテキスト変数からデータが渡されていることを確認しました。

AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *managedObjectContext = [appDelegate managedObjectContext];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

fetchRequest.entity = [NSEntityDescription entityForName:@"Livestock" inManagedObjectContext:managedObjectContext];

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"tank == %@ AND type == %@ AND name == %@", self.detailTank, self.detailType, self.detailName];

NSError *error = nil;
Livestock *livestock = [[managedObjectContext executeFetchRequest:fetchRequest error:&error] lastObject];
if (error) {
    NSLog(@"TaxonViewController: saveTaxonomy: Retrieving Livestock Record for saving: error = %@", error);
}

Taxonomy *taxonomy = livestock.taxonChildren;

taxonomy.kingdom = self.kingdom.text;
taxonomy.phylum  = self.phylum.text;
taxonomy.classs  = self.classs.text;
taxonomy.order   = self.order.text;
taxonomy.family  = self.family.text;
taxonomy.genus   = self.genus.text;
taxonomy.species = self.species.text;
taxonomy.common  = self.common.text;
taxonomy.livestockParent = livestock;

error = nil;
if (![managedObjectContext save:&error]) {
    NSLog(@"Taxonomy save error. error = %@, userInfo = %@", error, [error userInfo]);
}    

どんな洞察も大歓迎です!ありがとう!

更新1:

NULLtaxonChildren値をテストするようにコードを変更しました。これは私のためにそれを解決しました。ありがとうジェシー!

if (livestock.taxonChildren == NULL) {

    Taxonomy *taxonomy = [NSEntityDescription insertNewObjectForEntityForName:@"Taxonomy" inManagedObjectContext:managedObjectContext];

    taxonomy.kingdom = self.kingdom.text;
    taxonomy.phylum  = self.phylum.text;
    taxonomy.classs  = self.classs.text;
    taxonomy.order   = self.order.text;
    taxonomy.family  = self.family.text;
    taxonomy.genus   = self.genus.text;
    taxonomy.species = self.species.text;
    taxonomy.common  = self.common.text;
    taxonomy.livestockParent = livestock;
}
else {

    Taxonomy *taxonomy = livestock.taxonChildren;

    taxonomy.kingdom = self.kingdom.text;
    taxonomy.phylum  = self.phylum.text;
    taxonomy.classs  = self.classs.text;
    taxonomy.order   = self.order.text;
    taxonomy.family  = self.family.text;
    taxonomy.genus   = self.genus.text;
    taxonomy.species = self.species.text;
    taxonomy.common  = self.common.text;
    taxonomy.livestockParent = livestock;
}
4

1 に答える 1

1

あなたはlivestock.taxonChildrenゼロですか?最初に、そのオブジェクトのインスタンスをコンテキストに挿入する必要があります。1対1の関係であっても、自動的に作成されることはありません。

次のようなエラーをテストしないでください。

if (error) { ... }

errorフェッチ要求が成功するとゴミになる可能性があるためです。代わりに、戻り値をテストする必要があります。

NSArray *results = [managedObjectContext executeFetchRequest...]
if (!results) { ... }
于 2012-08-08T01:03:44.203 に答える