为什么我的NSFetchedResultsControllerDelegate方法在与我的实体创建关系时被随机调用?
我在调试NSFetchedResultsControllerDelegate
行为时遇到问题。为什么我的NSFetchedResultsControllerDelegate方法在与我的实体创建关系时被随机调用?
我的NSFetchedResultsController
有一个关于Object1
实体的获取请求。无论何时触摸一个单元格,我都会创建(并保存)一个与Object2
实体的新关系(或者在已经存在的情况下使用)。
我的问题是controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
在创建这样的关系时会随机调用(意思是说,有时它会被调用,有时不会)。
我的代码创建的关系用MagicalRecord:
+ (void)createOrUpdateRelationship:(NSDictionary *)userInfo
forObject1:(NSManagedObject1 *)object1 {
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
NSManagedObject2 *object2 = [NSManagedObject2 fetchObject2ForObject1WithID:object1.ID
inContext:localContext];
if (!object2) {
object2 = [NSManagedObject2 MR_createEntityInContext:localContext];
object2.createdAt = [NSDate date];
}
object2.updatedAt = [NSDate date];
// Store attributes from userInfo
object2.object1 = [object1 MR_inContext:localContext];
} completion:^(BOOL contextDidSave, NSError *error) {
// Celebrate
}];
}
任何想法,我可能做错了什么?
肮脏的亨利,
Object1正在和对象2和对象2一对一的关系与Object1反比关系以及:)
所以每当你改变这些对象的其他对象的关系值也将被修改:)因此NSFetchedResultsController被触发:)这很常见:)
你不能跳过这些变化被触发。
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
switch(type) {
case NSFetchedResultsChangeUpdate:
//you might consider ignoring it but I wont prefer that though :)
break;
}
}
哦,对不起,如果我的问题不明确:我没有问题与被调用的代表。我的问题是,当关系创建时,有时它会被调用,有时却不会。我需要知道为什么。 –
@ dirty-henry:我不用魔法记录工作,你可以确认一下,当你说有时它触发,有时不是你在本地上下文建立的关系被同步到主要上下文吗?或保存到持久性商店? –
绝对如此。本地上下文创建为主要上下文的子节点,并在此子节点/本地上下文和(2)父节点/主节点上进行保存(1)。 –
你必须有反对关系以及从对象2到对象1不是吗? –
绝对如此。我建立了1-1关系的两种方式。 –
请记住,如果object2已经存在,并且与另一个Object1对象(称为“oldObject1”)相关,则会更新* three *对象:object2,object1 *和* oldObject1(其关系将设置为nil)。这是否解释了随机行为? – pbasdf