【发布时间】:2010-11-04 10:30:13
【问题描述】:
我希望有人能够对此提供快速答案,这可能是一个非常明显的答案,但我无法理解它。
我有一个适用于 mac 的应用程序,我在其中使用 Core Data 来保存信息。一切正常,当我创建新数据时,它会在应用程序中正常显示,当我退出应用程序时,[managedObjectContext save:&error] 被成功调用,数据被存储到磁盘上的持久存储中。
我要做的是在任何信息发生更改时保存到核心数据。这背后的原因是为了防止应用程序崩溃时任何数据丢失,并且因为我将为用户提供存储在 dropbox/idisk 上的选项,所以最好立即保存信息,因为然后更改应该显示在他们正在访问相同数据的其他计算机。
到目前为止,我使用 NSNotificationCenter 发现了以下内容:
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(saveDatabaseInBackground)
name:NSManagedObjectContextObjectsDidChangeNotification
object:managedObjectContext];
当数据发生变化时,成功调用:
- (void) saveDatabaseInBackground
{
NSError *error = nil;
if ([managedObjectContext hasChanges])
{
[managedObjectContext save:&error];
}
}
但是,在托管对象上下文中调用 save 方法似乎会导致发布相同的通知,从而导致无限循环并导致崩溃。
有人对如何解决有任何想法吗?
谢谢,
罗伯
【问题讨论】:
标签: objective-c macos core-data