gpt4 book ai didi

ios - 为什么 NSManagedObjectContextObjectsDidChangeNotification 在回滚后用删除的对象调用两次?

转载 作者:行者123 更新时间:2023-11-28 19:40:46 24 4
gpt4 key购买 nike

我对 NSManagedObjectContextObjectsDidChangeNotification 有一个问题,在插入一个对象然后执行回滚(因此它被删除)之后,关于删除的更改通知被调用两次。这个意外的通知给我带来了麻烦,我已经追溯到这个问题。我编辑了 Apple's Earthquakes example来证明这个问题。编辑是:

- (void)viewDidLoad {
[super viewDidLoad];

[self reloadTableView:self];

[NSNotificationCenter.defaultCenter
addObserver:self
selector:@selector(contextObjectsDidChangeNotification:)
name:NSManagedObjectContextObjectsDidChangeNotification
object:self.managedObjectContext];

AAPLQuake* quake = (AAPLQuake *)[NSEntityDescription insertNewObjectForEntityForName:@"Quake" inManagedObjectContext:self.managedObjectContext];

NSLog(@"Why is deleted notified twice?");
[self.managedObjectContext rollback];
}

- (void)contextObjectsDidChangeNotification:(NSNotification *)notify{
NSLog(@"contextObjectsDidChangeNotification:");
NSDictionary* userInfo = notify.userInfo;
NSSet* inserted = userInfo[NSInsertedObjectsKey];
if(inserted){
NSLog(@"\tinserted %ld", inserted.count);
}
NSSet *deleted = userInfo[NSDeletedObjectsKey];
if(deleted){
NSLog(@"\tdeleted %ld", deleted.count);
}
}

运行结果如下:

2015-12-23 00:15:20.086 Earthquakes[7631:5431685] Why is deleted called twice?
2015-12-23 00:15:20.086 Earthquakes[7631:5431685] contextObjectsDidChangeNotification:
2015-12-23 00:15:20.086 Earthquakes[7631:5431685] inserted 1
2015-12-23 00:15:20.086 Earthquakes[7631:5431685] contextObjectsDidChangeNotification:
2015-12-23 00:15:20.087 Earthquakes[7631:5431685] deleted 1
2015-12-23 00:15:20.087 Earthquakes[7631:5431685] contextObjectsDidChangeNotification:
2015-12-23 00:15:20.087 Earthquakes[7631:5431685] deleted 1

可用的示例项目 here .

有人知道为什么会这样吗?我在 OS X 10.11.2 和 iOS 9.2 上都体验过。

最佳答案

我看到了同样的行为,但我不知道为什么会这样。但是,您似乎可以通过查看托管对象的 hasChanges 属性来区分第一次调用和第二次调用。在第一次调用时,hasChanges 为 YES,在第二次调用时为 NO。至少,这应该足以避免自己处理两次删除。

相同的更改发生在对象的 deleted 属性上,因此最好同时检查两者。

关于ios - 为什么 NSManagedObjectContextObjectsDidChangeNotification 在回滚后用删除的对象调用两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34426719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com