【问题标题】:Multi User Core Data w/ XPC带 XPC 的多用户核心数据
【发布时间】:2013-05-25 19:24:01
【问题描述】:

你好,

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

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

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

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

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

提前感谢您的帮助。

【问题讨论】:

  • 这个问题似乎有点过于宽泛了。如果您缩小范围,提出更直接的问题并向我们展示一些代码,您可能会取得更大的成功。

标签: objective-c core-data launchd xpc nsxpcconnection


【解决方案1】:

也许它有效。 ;-)

但是你必须处理一些特殊的问题。长话短说:我认为使用incremental store 这样做会更好。但它的文档几乎很差。

我们为同步实现了类似的功能。我们have to 实现了这个网络。 (也就是你想做什么。)问题如下:

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

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

这样做有一个你不知道的问题,一个用户改变了什么。你只能得到整个商店。相比之下,增量存储通过save request 知道具体的变化。

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

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

我的 0.05 美元。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-08
    • 2015-03-08
    • 2011-04-23
    • 2013-06-03
    • 1970-01-01
    • 2017-02-18
    • 2014-01-16
    • 1970-01-01
    相关资源
    最近更新 更多