- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
NSUndoManager
只能在子 NSManagedObjectContext
中使用(与 Core Data 一起使用时)。这是因为 UIManagedDocument
可能会在任何时间点自动保存,之后 undo
将无效。因此,使用 NSUndoManager
来实现保存/取消功能是没有意义的,因为子上下文会给你相同的结果。
真的有点难过,因为 NSUndoManager
比子上下文更容易实现(对于后者我必须调用 existingObjectWithID
将对象从父上下文复制到 child - 痛苦)。如果 groupingLevel != 0
,我个人认为文档不应该自动保存。吐槽完毕。
我有一个 TableView Controller ,它使用 Core Data 将数据加载到 UIManagedDocument
中。它转到一个 View Controller 来编辑表中的每一行。在那个 View Controller 中,我有取消和保存按钮。我正在通过我的 NSManaged
对象(下面的 self.list
)上的一个类别使用 NSUndoManager
实现取消功能。
- (void)viewDidLoad
{
[super viewDidLoad];
[self.list beginEdit];
}
- (IBAction)cancel:(id)sender
{
[self.list cancelEdit];
[self close];
}
- (IBAction)save:(id)sender
{
[self.list endEdit];
[self close];
}
该类别实现了 beginEdit
、endEdit
和 cancelEdit
,旨在处理 NSUndoManager 内容。在下面的代码中,useUndo
是一个常量,我将其设置为 NO 或 YES 以查看使用 NSUndoManager 的影响。
- (void)beginEdit
{
if (useUndo)
{
NSUndoManager *undoManager = [[NSUndoManager alloc] init];
self.managedObjectContext.undoManager = undoManager;
[undoManager beginUndoGrouping];
}
}
- (void)endEdit
{
[self.managedObjectContext save:nil];
if (useUndo)
{
NSUndoManager *undoManager = self.managedObjectContext.undoManager;
[undoManager endUndoGrouping];
self.managedObjectContext.undoManager = nil;
}
}
- (void)cancelEdit
{
if (useUndo)
{
NSUndoManager *undoManager = self.managedObjectContext.undoManager;
[undoManager endUndoGrouping];
[undoManager undo];
}
}
如果我保存对象并在 useUndo = NO
时单击 Home 按钮,我可以看到 Core Data 调试消息显示它正在提交更改。但是,使用 useUndo = YES
,当我单击主页按钮时它不会自动保存。我已经等了几分钟,它仍然没有自动保存。有什么方法可以强制自动保存吗?
谁能解释为什么使用 undoManager 会导致这种行为变化?
我怀疑我的处理方式有误,或者代码中存在一些简单的问题。任何帮助将不胜感激。
最佳答案
我不确定它是否正确,但 stackoverflow 上的其他答案已经提到 NSUndoManager 在上下文保存时清除撤消堆栈。这意味着使用具有自动保存功能的撤消管理器最多只能用几秒钟(无论自动保存间隔是多少)。那里可能有联系,我正在尝试了解更多...
关于ios - 自动保存不适用于 UIManagedDocument 上的 NSUndoManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15216273/
我一直在阅读苹果文档,但仍然有一个问题,我找不到答案。我有一个 UIManagedDocument 对象,它有两个嵌套上下文 - 主线程上的子上下文和私有(private)线程上的父上下文。接下来,我
我已经看过 How do I create a global UIManagedDocument instance per document-on-disk shared by my whole ap
在UIManagedDocument的文档中简要提到了以下内容: 为了支持异步数据写入,Core Data实际上使用一对嵌套的托管对象上下文。 是特定于UIManagedDocument还是Core
所以我将核心数据迁移到UIManagedDocument。 在iPhone模拟器上调用openWithCompletionHandler可以正常工作,但是当我尝试在真实设备上运行项目时,它始终返回NO
我有一个连接到 NSFetchedResultsController 的 TableView ,相应的 managedObjectContext 是 self.myDatabase.managedOb
好吧,假设我正在制作一个观鸟应用。 有一个“官方”鸟类数据库。它存储在一个 UIManagedDocument 中。它用于将所有鸟类填充到 UITableView 中,并使用图片和数据为每只鸟类提供详
我正在尝试使用 Core Data 制作一个 iPhone 应用程序。我必须使用 NSManagedObjectContext 来访问数据,为此我使用了 UIManagedDocument。但是,如果
我的应用使用核心数据 SQLite 数据库。我想让我的用户使用 iCloud 在设备之间同步它 - 我想我可以使用 UIManagedDocument。 我按照 Apple 的文档对其进行了子类化,并
我正在使用这个博客:http://www.adevelopingstory.com/blog/2012/03/core-data-with-a-single-shared-uimanageddocum
我找到了这些斯坦福教程 https://itunes.apple.com/us/course/ipad-iphone-app-development/id495052415 ,一直在听有关核心数据的讲
我正在开发一个使用 UIManagedDocument 子类的 iPhone 应用程序并将其文档存储在 iCloud 上。 一切正常,直到我更改了我的核心数据模型/方案(添加了一个新的模型版本 - 就
首先,我应该提到这是我在这个网站上的第一篇文章。我正在尝试自学 iOS 编程,在谷歌搜索答案时,我发现我经常被引导到这里。所以感谢所有在这里做出贡献的人。你已经帮了我很多了。 我一直在参加斯坦福大学
在斯坦福大学 CS193P 类(class)中,我开始在我的应用程序中使用 CoreData,该类(class)涉及 iOS 5 新类 UIManagedDocument 的使用。该方法本身非常简单,
我的应用程序中有一项功能,用户可以通过单击按钮重置应用程序上的所有内容。此时,我没有尝试删除所有核心数据关系(级联删除)和其他并发症,而是决定使用这段代码实际删除整个 UIManagedDocumen
我设置了异常断点,当我调用时- (void)saveToURL:(NSURL *)url forSaveOperation:(UIDocumentSaveOperation)saveOperation
我正在使用 UIManagedDocument 读取和写入 CoreData。我有 Document 类。这是一些教程中的文档: .h #import #import typedef void (
最近,我在 iOS 中使用一个时间表应用程序,我在使用 Core Data 时遇到了问题。 我的应用程序有一个主用户界面,有点像 Apple 创建的原始日历应用程序,我将所有事件数据保存在 Core
我在使用 UIManagedDocument 保存实体时遇到问题。我有一个 NSFetchedResultsController,其上下文设置为 UIManagedDocuments 上下文。我在 C
如标题中所述,我想同步打开 UIManagedDocument,即,我希望我的执行等到打开完成。我仅在 mainThread 上打开文档。 当前要打开的 API 使用 block [UIManaged
我一直在关注 CS193p 关于核心数据的讲座,但在插入新的托管对象时遇到了问题。 错误是: Terminating app due to uncaught exception 'NSInternal
我是一名优秀的程序员,十分优秀!