在 UIManagedDocument 中禁用自动保存
Posted
技术标签:
【中文标题】在 UIManagedDocument 中禁用自动保存【英文标题】:Disable auto-saving in UIManagedDocument 【发布时间】:2013-11-12 21:15:14 【问题描述】:有没有办法禁用 UIManagedDocument
的自动保存?
我在控制器中显示NSManagedObjects
,用户可以在其中添加和删除它们。但是我只想在用户明确触发保存操作时保存这些更改。否则我想放弃更改。
感谢您的帮助!
【问题讨论】:
如果您的应用程序崩溃/被杀死并且用户没有更改按保存按钮会发生什么? 这是一个很好的观点。对于我的情况,虽然恢复到以前的状态是件好事。谢谢你的评论! 【参考方案1】:你不能在UIManagedDocument
子类中重写下面的方法
- (void)autosaveWithCompletionHandler:(void (^)(BOOL success))completionHandler
编辑:这里有一些您可能想要包含的其他方法。我使用第一个来确认是否以及何时发生自动保存,第二个用于调试某些错误,无法通过任何其他方式获得其详细信息。这就是我的子类中的所有内容,因此添加它非常简单。
@implementation YourManagedDocument
- (id)contentsForType:(NSString *)typeName error:(NSError *__autoreleasing *)outError
NSLog(@"Auto-Saving Document");
return [super contentsForType:typeName error:outError];
- (void)handleError:(NSError *)error userInteractionPermitted:(BOOL)userInteractionPermitted
NSLog(@" error: %@", error.localizedDescription);
NSArray* errors = [[error userInfo] objectForKey:NSDetailedErrorsKey];
if(errors != nil && errors.count > 0)
for (NSError *error in errors)
NSLog(@" Error: %@", error.userInfo);
else
NSLog(@" error.userInfo = %@", error.userInfo);
@end
【讨论】:
是的,在我看来,这就是我最终要做的事情,并在控制器中传递一个我想禁用自动保存的标志。我希望能找到一些避免子类化的解决方案。还是谢谢!【参考方案2】:有关详细信息,请参阅 this SO answer,但除非您明确保存您的 NSManagedObjectContext
,否则您可以调用 [managedObjectContext rollback]
撤消用户所做的任何更改。
【讨论】:
这似乎是正确的方法。但是,它如何知道放弃更改的时间点?自动保存以不可预知的方式发生。感谢您的回复!以上是关于在 UIManagedDocument 中禁用自动保存的主要内容,如果未能解决你的问题,请参考以下文章
使用 saveToURL:forSaveOperation:completionHandler 自动删除 UIManagedDocument 文件:
从 UIManagedDocument 到普通堆栈的核心数据迁移