【发布时间】:2013-12-04 14:23:02
【问题描述】:
我为我的所有实体添加了一个 lastModifiedDate 属性,以避免在将 UIManagedDocument 与 iCloud 同步时出现重复,我发现如果我使用离线设备 (iPad) 创建新实体可能会发生这种情况同时,我使用另一个在线设备(iPhone)创建了相同的实体。
我想在对象更改时设置此属性,因此我订阅了NSManagedObjectContextObjectsDidChangeNotification。我编写的用于设置 lastModifiedDate 的代码会创建一个无限循环,因为通过设置 lastModificationDate 属性它会创建一个更改,该更改将由 NSManagedObjectContextObjectsDidChangeNotification 等再次通知...
有办法解决吗?有没有更好的方法来实现我的目标?我应该继承 managedObjectContext 并覆盖willSave:吗?
//At init...
[[NSNotificationCenter defaultCenter] addObserver:applicationDatabase
selector:@selector(objectsDidChange:)
name:NSManagedObjectContextObjectsDidChangeNotification
object:applicationDatabase.managedDocument.managedObjectContext];
(void) objectsDidChange: (NSNotification*) note
{
// creates an infinite loop
NSDate *dateOfTheLastModification = [NSDate date];
NSMutableArray *userInfoKeys = [[note.userInfo allKeys] mutableCopy];
for(int i=0; i< userInfoKeys.count;i++){
NSString *key = [userInfoKeys objectAtIndex:i];
if([key isEqualToString:@"managedObjectContext"]){
[userInfoKeys removeObject:key];
}
}
for(NSString *key in userInfoKeys){
NSArray *detail = [note.userInfo objectForKey:key];
for (id object in detail){
[object setValue:dateOfTheLastModification forKey:@"lastModifiedDate"];
}
}
【问题讨论】:
标签: ios objective-c core-data icloud uimanageddocument