C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了objective-c – 如何禁止自动保存“文件已被其他应用程序更改”警报?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个NSDocument子类,它从磁盘提供一个文本文档.我正在尝试在检测磁盘上的文件更改时自动刷新.我已经覆盖了-presentedItemDidChange,如下所示:
- (void)presentedItemDidChange
{
    [super presentedItemDidChange];
    // Ignoring bundles and error-handling for the moment.
    NSData *newData = [NSData dataWithContentsOfURL:self.presentedItemURL];
    self.textView.String = [[NSString alloc] initWithData:newData encoding:NSUTF8StringEncoding];
}

在另一个应用程序中更改文件时,UI会刷新.问题是,当我尝试在另一个应用程序修改文档后将文档保存在我的应用程序中时,我得到了这个对话框:

我有点想知道为什么会发生这种情况(不确定它是否正确):文档的修改时间晚于(因为它被其他应用程序修改)而不是我应用程序中最新保存的版本.但是我可以通知自动保存系统我已经用它做了什么让它消失了吗?或者我在刷新文档时做错了,我应该以其他方式正确处理文档版本?我需要虑外部应用程序支持不支持自动保存.

提前致谢.

解决方法

@ uranusjr的回答指出我正确的方向 – 只有revertDocumentToSaved:不是正确的地方.
override func presentedItemDidChange() {
    dispatch_async(dispatch_get_main_queue()) {
        self.reloadFromFile()
    }
}

func reloadFromFile() {

    guard let fileURL = self.fileURL else { return }

    do {
        try revertToContentsOfURL(fileURL,ofType: "YOUR TYPE HERE IF NECESSARY")
    } catch {
        // TODO handle error
        print(error)
    }
}

这只是重新加载文件.调用readFromURL(url:,ofType :)(或基于NSData /文件包装器的变体),您可以从那里重新创建数据结构.

大佬总结

以上是大佬教程为你收集整理的objective-c – 如何禁止自动保存“文件已被其他应用程序更改”警报?全部内容,希望文章能够帮你解决objective-c – 如何禁止自动保存“文件已被其他应用程序更改”警报?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。