1

你好,

这是我的第一篇文章,所以如果这已经在某个地方得到了回答,请原谅我(我确实搜索过)。

问题:我有一个 Cocoa 应用程序需要在系统上的多个用户帐户之间共享一个 Core Data 数据库。

想法:我将创建一个守护进程来处理来自用户的请求(跨越用户权限边界)以保存/检索来自 Core Data 的数据。创建在应用程序中使用的共享托管对象上下文,并通过 NSXPCConnection 将该 MOC 传递给守护程序。守护进程将拥有一个完全实现的核心数据堆栈。然后,我可以将在应用程序中创建的 MOC 设置为由守护程序创建的 MOC 的子级。点击保存,我就完成了?

问题:这甚至会起作用吗?这只是一个愚蠢的想法吗?其他解决方案是什么?NSManagedObjectContext 符合 NSCoder 协议,但是为了将它与 XPC 一起使用,我必须对其进行子类化并使其符合 NSSecureCoding 协议?我是否还需要确保我的 ManagedObject 子类符合 NSSecureCoder 协议才能与 NSXPConnection 一起使用?我想我可以一起放弃上下文,只发送托管对象。

我假设 NSXPCConnection 复制对象而不是使用指针?这个对吗?此外,我可能必须牢记性能,因为对象被编码/解码为完全实现的对象并且没有错误。这个对吗?

预先感谢您的帮助。

4

1 回答 1

0

也许它有效。;-)

但是有一些特殊的问题你必须处理。长话短说:我认为使用增量存储会更好。但它的文档几乎很差。

我们为同步实现了类似的东西。我们必须为网络实现这一点。(也就是说,你想要做什么。)这里有问题:

A. 在上下文中移动无济于事。上下文包含存储对象的子集。对于应用程序程序员来说,上下文中的哪一个是随机的。(插入和更改的对象将存在,但不会更改,未插入的对象可以存在并且可以消失。)

B. 你当然可以在商店里四处走动。由于它在硬盘上,如果您可以访问存储它的位置,这将更容易。您可以为此使用 XPC 服务。

这样做有一个你不知道的问题,一个用户改变了什么。你只能得到整个商店。相反,增量存储通过保存请求知道具体的更改。

C. “不同的用户”意味着你有冲突。这对 Core Data 来说是“不自然的”。Is 是一个图形建模器,因此,它不是“基于连接的”。它打开一个文档、拥有它、更改它、存储它并关闭它。作为每个文档,它通常一次不属于两个或多个应用程序(包括一个应用程序的两个运行实例)。没有真正好的机制可以同时在商店工作。所以你必须自己处理。在增量存储级别上处理它可能比在它之上的级别上更容易处理。

你想做的事情并不容易,如果你不做出假设,你可以在你的特殊情况下做出。(例如在更高级别上具有锁定机制。)

我的 0,05 美元。

于 2013-05-27T08:16:32.433 回答