我对CoreData有疑问,我不知道更进一步。我将它与ICloud一起使用并在两个iPhone上进行测试。
现在我一个接一个地在两部手机上启动我的应用程序。我在一部手机中添加了一条记录。一旦两部电话切换到“使用本地存储:0”,我就可以看到一部电话上的内存(收到更改通知的电话)。
调用[self.howRUDocument.managedObjectContext mergeChangesFromContextDidSaveNotification:notification]时会发生这种情况;方法。当我调试时,stepover mergeChangesFromContextDidSaveNotification将永远不会到达下一行。
- (id)initWithDocumentName:(NSString *)documentName {
self = [super init];
if (self) {
self.documentName = documentName;
iCloudCommunicator = [ICloudCommunicator sharedInstance];
[iCloudCommunicator registerForICloudAccountChange:self];
if ([iCloudCommunicator useICloud]) {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(documentChanged:)
name:NSPersistentStoreDidImportUbiquitousContentChangesNotification
object:self.howRUDocument.managedObjectContext.persistentStoreCoordinator];
}
}
return self;
}
-(void) documentChanged:(NSNotification *)notification {
[self.howRUDocument.managedObjectContext mergeChangesFromContextDidSaveNotification:notification];
}
这是我在探查器中看到的:
所以它是一个无限循环(不是苹果地址:-D)。有谁知道为什么?
另一个奇怪的是,这个方法属于类Model。我有两个模型从这个类扩展。对于一个合并正在按预期工作,另一个我得到上述异常。
非常感谢!
答案 0 :(得分:0)
我解决了这个问题。我有一个混乱的设置文件。当创建并将其移动到云时,我正在移动错误的文档URL。 还存在竞争条件,因此文档在创建之前尝试打开。
我有这段代码,效果很好:
- (id)initWithDocumentName:(NSString *)documentName {
self = [super init];
if (self) {
_dataChangeListeners = [[NSMutableArray alloc] init];
self.documentName = documentName;
iCloudCommunicator = [ICloudCommunicator sharedInstance];
[iCloudCommunicator registerForICloudAccountChange:self];
if ([iCloudCommunicator useICloud]) {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(documentChanged:)
name:NSPersistentStoreDidImportUbiquitousContentChangesNotification
object:self.howRUDocument.managedObjectContext.persistentStoreCoordinator];
}
}
return self;
}
-(void) documentChanged:(NSNotification *)notification {
[self.howRUDocument.managedObjectContext mergeChangesFromContextDidSaveNotification:notification];
[self notifyDataChangeListeners];
}