1

在我的项目中,我有一些从服务器显示的对象,我们称它们为 Foo。当我得到我的 Foo 提要时,我将它们解析为一个名为 RemoteFoo 的 NSMutableDictionary 子类,并将这些 RemoteFoo 对象传递到应用程序周围以显示数据。

如果用户最终想要下载 RemoteFoo,然后我创建一个名为 Foo 的核心数据 NSManagedObject 实体,并使用 RemoteFoo 中的值对其进行实例化。这一切都有效。

我遇到的问题是,如果我想要一个方法在 RemoteFoo 和 Foo 上运行,我必须在 RemoteFoo.m 和 Foo.m 中复制它。另外,如果我的应用程序充满了重复的 init,就像:

- (id)initWithFoo:(Foo *)foo;
- (id)initWithRemoteFoo:(RemoteFoo *)foo;

如何避免所有这些代码重复,同时仍将临时远程 RemoteFoo 与代表用户在本地保存的 Foo 的核心数据 Foo 实体分开?

4

3 回答 3

3

你有没有想过使用类集群之类的东西——

http://seanmurph.com/weblog/make-your-own-abstract-factory-class-cluster-in-objective-c/

    --------- Foo --------          NSManagedObject
    |                    |                 |
RemoteFoo             LocalFoo ------ CoreDataFoo 
于 2010-01-29T19:42:15.923 回答
2

您可以将所有 RemoteFoo 保存为 Foo 并使用它们。如果您需要不同的行为,您可以在 Foo 上有一个属性来指示它是否是远程的。

于 2010-01-29T19:09:13.037 回答
1

如下更改您的核心数据模型。使用一个 Foo 实例并添加默认设置为 NO 的布尔属性 isRemote(或类似的东西)。当您下载远程对象时,将它们实例化为 Foo 托管对象并将其 isRemote 属性设置为 yes。

这样,您只需处理应用程序中的一个实例,同时保留清楚地区分本地和远程 Foo 对象的能力。如果您的应用程序允许这样做,您甚至可以将 isRemote 属性声明为瞬态,这样它就永远不会存储在磁盘上,而只会存储在内存中。如果您不关心保留此信息,那么这可能是最好的方法。

于 2010-01-29T19:31:38.627 回答