问题标签 [nspersistentdocument]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
152 浏览

objective-c - 核心数据:失去了保存新文档的能力,但仍然可以编辑和保存现有文档

我目前正在使用NSPersistentDocument轻量级迁移开发应用程序的第一个版本。数据模型现在升级到版本 12。从版本 9 切换到版本 10 时,我失去了保存新文档的能力,但直到现在我才注意到,因为我正在使用与第一个版本相同的旧文档进行测试。

我仍然可以很好地编辑和保存这些文档,我什至可以使用旧版本的应用程序生成文档并使用当前版本迁移它们。

当我打开一个新文档,编辑它并等待自动保存或自己保存时,configurePersistentStoreCoordinatorForURL崩溃:

我寻找一个名称缺失的实体,但没有找到。数据模型看起来不错,即使我查看 XML 源代码也是如此。没有NSObjectControllerNSArrayController缺少其实体名称。configurePersistentStoreCoordinatorForURL无论我是否覆盖它都会崩溃(对于轻量级迁移)。

我清除了所有我能想到的 Xcode 派生数据文件夹,在具有不同 Xcode 版本(8.3 和 8.2.1)的不同 Mac 上编译和运行该应用程序,到处都是同样的问题。run 参数com.apple.CoreData.SQLDebug没有提供任何有用的信息。

我从模型版本 9 到 12 添加了一些实体,我可能删除了一个,但我记不清了。

Xcode 是否还有其他地方隐藏数据模型版本信息,例如哈希?任何想法在哪里看?我应该从头开始重新创建数据模型吗?

0 投票
2 回答
107 浏览

swift - 子类化 NSArrayController 会导致 ManagedObjectContext 中的对象不在 NSTableView 中显示

这很奇怪。我有一个包含三个实体的模型。像这样: 在此处输入图像描述

在 InterfaceBuilder 中,我将 NSArrayController 通过 RepresentedObject 连接到 MOC 到 ViewController。一切正常,我可以添加和删除主对象,选择它们,我可以绑定到 TableView 并编辑它们。但是,如果我将 NSArrayControler 子类化为 MasterController 并仅添加观察者:

TableView 没有看到已经存在的对象,只是添加了。我可以编辑它们。但是当我再次打开文档时,新添加的对象也消失了。如果我将控制器的类改回 NSArrayController 我可以再次看到它们。

有什么帮助吗?

0 投票
2 回答
99 浏览

core-data - NSPersistentDocument 在内部启动后被标记为不“脏”/已编辑

我有一个 NSPersistentDocument (CoreData),在我将它呈现给用户之前我会启动它。这意味着我创建了一些内部核心数据对象并将它们添加到文档/持久存储/托管对象上下文中。

但是,这意味着即使没有发生用户活动,文档也会在文档关闭时显示保存对话框。我希望它被标记为不脏并且没有保存对话框,因为没有发生真正的变化。

任何想法?提前谢谢了!

0 投票
2 回答
966 浏览

macos - 使用 NSPersistentDocument 创建“文档”

我想创建一个使用

  • 迅速
  • 核心数据
  • 以标准 macOS 方式工作的“文档”[自定义扩展,包含与该文档相关的所有数据的单个“文件”/文件包装器]

这似乎是不可能的。该文件非常清楚地指出

NSPersistentDocument 不支持某些文档行为:文件包装器。[..]

这让我认为在 CoreData 中处理图像的常用方法 -带有“允许外部存储”的二进制数据并将它们保存到不同的位置,将 URL 存储在数据库中 - 不能与 NSPersistentDocument 一起使用。我希望我的用户能够对我的“文件”执行通常的 Finder 操作(复制、移动到外部存储、从外部备份恢复),并且需要将我的所有数据放在一个包中。

文件存储的 SQL 版本在保存时会产生通常的三重堆栈 - .sqlite、.sqlite-shm、.sqlite-wal - 作为“文档”是无用的。

有没有我忽略的解决方案?(示例非常少;Big Nerd Ranch 示例也没有解决这个问题;Marcus Zarra 和 Objc.io 都没有涉及 NSPersistentDocument)。

0 投票
0 回答
33 浏览

cocoa - ibaction 不会在 macOS 的 NSPersistentDocument 中触发

我有一个带有 2 个按钮的应用程序macOS,但它们没有触发我已将 IBActions 连接到按钮

文档

和 MainWindowController

类 MainWindowController: NSViewController {

}

我都试过了不知道怎么办

我肯定忘记了在另一个应用程序 NSPersistentDocument 中的东西没有问题

https://www.dropbox.com/s/qlww3hgii7wamup/CoreDataDragDropSwift2.zip?dl=0

在此处输入图像描述

0 投票
1 回答
277 浏览

icloud - iCloud NSDocument 保存警告 - 由 lastUsedDate 文件属性引起?

我有一个NSPersistentDocument在 OS X 上使用(没有自动保存)和UIDocument在 iOS 上使用(也没有自动保存)的应用程序。文件表示是二进制核心存储。自 iOS 7 + macOS 10.10 以来,此应用程序一直运行良好。

如果我在 OS X 10.13 上打开一个文档,而另一台设备(macOS 10.13 或 iOS 11)打开同一个文件,在下一次保存时我会收到警告“自您打开或保存此文档后,该文件的文件已被另一个应用程序更改。 " . 该警告是虚假的,因为仅在另一台设备上发生了打开 - 而不是保存。

在寻找此通知的可能原因时,我注意到当在一台设备上打开 iCloud 文件时,com.apple.lastuseddate#PS会更新名为的扩展属性。我已确认此扩展属性在 iOS 11 和 macOS 10.13 上均已更新。此扩展属性似乎未在早期版本的 iOS 或 macOS 中使用。我想知道文件元数据的更新是否触发了这个虚假警告。

(我怀疑这个属性可能与NSFileProvideriOS 11 相关,因为有一种新方法setLastUsedDate:forItemIdentifier:completionHandler:,而FinderSyncmacOS 10.13setLastUsedDate:forItemWithURL:completion:也是新方法。)

我的问题是——其他人看到这种新行为了吗?它是否会引起其他人如此烦人的副作用?

0 投票
0 回答
99 浏览

macos - NSDocument 拒绝使用 NSFetchedResultsController 更新核心数据更改

我有一个基于文档的核心数据应用程序。每个 NSPersistantDocument 都有自己的托管对象上下文。

我可以打开/创建一个文档并在正常范围内创建一个托管对象,但是在打开/创建一个文档然后在该文档中初始化并插入一个托管对象之后,NSFetchedResultsController 不会注册从任何其他文档创建的托管对象:

我确定我错过了一些重要的东西。

我可以看到我有以下变化:

并且可以通过以下方式检查它们确实是对象:

managedObjectContext.insertedObjects

看起来 NSFetchedResultsController 是问题,因为在观察 NSManagedObjectContextObjectsDidChangeNotification 时,我收到插入的托管对象的通知,但我的 NSFetchedResultsController 委托实现:

controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:

什么都得不到……

我想没有人有任何想法吗?

0 投票
2 回答
60 浏览

cocoa - Encrypt NSDocument on macOS

Is there anyway one can override NSPersistentDocument to encrypt and require a password to open the file? In other words, is it possible to encrypt a document as a whole with a user provided password? I've looked into solutions and it seems the only way is to actually encrypt the CoreData data itself independently, however that would make it impossible to use a NSPredicate to filter a NSFetchRequest since the data would be encrypted. An alternative would be using Realm which has an encryption key, but that only encrypts the Realm data, leaving all other data in the document unencrypted.

0 投票
0 回答
97 浏览

ios - 2020 年,如何跨设备(macOS、iOS)同步基于 NSPersistentDocument 的应用程序

假设一个 macOS 应用程序使用 NSPersistentDocument(因此是 CoreData)。所有用户数据都存储在<documentName>.<myApp>文件中。在 2020 年,如果我要开发一个 iOS 版本的应用程序,我如何为用户提供在 macOS 和 iOS 之间同步这些文档的功能?

根据我的研究,使用 CloudKit 似乎不是基于 NSDocument 的应用程序的方法。

谢谢!

0 投票
1 回答
61 浏览

macos - NSDocumentController closeAllDocumentsWithDelegate 不调用我的 NSPersistentDocument 子类的 canCloseDocumentWithDelegate

根据 Apple 的文档,如果您退出应用程序, closeAllDocumentsWithDelegate(from NSDocumentController) 应该调用所有打开的文档。canCloseDocumentWithDelegateNSDocument

NSPersistentDocument基于我的应用程序中,我需要覆盖canCloseDocumentWithDelegate以警告用户,以防文档关闭时某些服务器功能仍在运行。这与任何数据更改无关。这在用户关闭单个文档时有效;我可以出示一张带有警告的工作表,让用户取消关闭过程。

但是,canCloseDocumentWithDelegate退出应用程序时不会调用我的版本。这可能是什么原因?