我是CoreData的新手并且一直在寻找所有书籍和示例,但没有一个真正告诉我如何做到这一点,所以非常感谢任何帮助。
基本上,我有一对多关系的2个实体。 [在这种情况下,其他关系并不重要]
关系和实体:
现在,我可以使用NSFetchRequest基于给定的个人资料实体获得所有的MedicalCondition实体
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"MedicalCondition" inManagedObjectContext:delegate.managedObjectContext];
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"condition" ascending:YES]];
request.predicate = [NSPredicate predicateWithFormat:@"MedicalToProfile = %@", myProfile];
//request.fetchBatchSize = 20;
NSFetchedResultsController *frc = [[NSFetchedResultsController alloc]
initWithFetchRequest:request
managedObjectContext:delegate.managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
NSError *error;
BOOL success = [frc performFetch:&error];
NSArray *fetchedObjectsFromCore;
[request release];
if (success) {
fetchedObjectsFromCore = [frc fetchedObjects];
}
这没关系。现在,当我想要更新一个特定条目时,问题就出现了。我不知道该怎么做。我可以添加更多的MedicalCondition对象就好了。但是当谈到编辑时,我不确定。
我唯一想到的方法是在实体中使用“ID”属性。我认为必须有一个比这更好的解决方案。请帮忙 !非常感谢。
答案 0 :(得分:2)
如果您有一个来自有效上下文的Core Data对象,那么编辑它非常容易。修改对象数据,然后保存其上下文。假设你有一个MedicalCondition
对象,你以某种方式得到了它。
MedicalCondition *condition;
// modify a field
condition.date = [NSDate date];
// save
NSError *error;
[managedObjectContext save:&error];
此外,如果您有一个给定的Profile
对象,只要您不关心订单,就可以直接获取所有关联的MedicalCondition
对象,而无需执行提取。
Profile *someonesProfile = ...;
someonesProfile.conditions
// and access a profile from a given MedicalCondition since
// it seems to be a bi-directional relationship.
MedicalCondition *someCondition = ...;
someCondition.profile.dateofbirth;
您应该为关系提供更有意义的名称,而不是MedicalToProfile
,ProfileToMedication
等。例如,可以使用:{/ p>而不是ProfileToMedical
。
medicalConditions
在语义上更好,并且在代码中读得更好:
someonesProfile.medicalConditions
答案 1 :(得分:1)
再次感谢Anurag。 我有点工作了。
这就是我做的方式
NSSet *newMedical = myProfile.ProfileToMedical;
NSMutableArray *arrayMedical = [NSMutableArray arrayWithArray:[newMedical allObjects]];
MedicalCondition *c = [arrayMedical objectAtIndex:1];
c.condition = @"Amazing";
它更新正确的地方:)
但现在我再次打电话
NSSet *details = myProfile.ProfileToMedical;
NSMutableArray *arrayDetail = [NSMutableArray arrayWithArray:[details allObjects]];
返回NSSet显示更新的条件为其他索引。我明白那是因为myProfile.ProfileToMedical未分类?所以我必须在查看/编辑属性之前先对数组进行排序,以确保一致性?
再次感谢