核心数据一对一关系,节省不起作用

时间:2012-08-08 00:55:10

标签: iphone ios core-data one-to-one

我错过了那条我认为自己曾经拥有的东西的船,希望有人可以提供帮助。

我正在使用Xcode 4.4版,我的项目正在使用Core Data,Storyboards和ARC。

我的项目有以下3个实体。

enter image description here

一切都适用于Livestock和Notes实体。但是,当我尝试将数据保存到Taxonomy实体时,没有任何反应。我没有收到任何错误,但数据未保存。

我没有使用数组获取结果吗?基于我的谓词,我期待只返回一个对象,所以我认为我不需要一个数组。下面是我执行保存的代码。我已经验证了数据是从视图的文本变量传入的。

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:

修改代码以测试NULL taxonChildren值。这解决了我。谢谢杰西!

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

1 个答案:

答案 0 :(得分:1)

你的livestock.taxonChildren是否为零?您必须先将该对象的实例插入到您的上下文中;它不会自动创建一个,即使是一对一的关系。

请注意,您不应该测试这样的错误:

if (error) { ... }

因为获取请求成功时error可能是垃圾。您应该测试返回值:

NSArray *results = [managedObjectContext executeFetchRequest...]
if (!results) { ... }