【发布时间】:2012-03-26 20:26:00
【问题描述】:
我创建了一个使用 Core Data 的基于文档的应用程序。我首先创建了 mac 版本,现在它可以正常工作了,我正在继续创建它的 iOS 版本。
关于核心数据位,我只是不知道如何在 iOS/mac 版本之间最大限度地重用代码,因为它们不使用相同的类。
我的文档类处理保存等是NSPersistentDocument 的子类。我的意图是一个设计良好的模型类应该在这两种环境中工作,特别是因为我没有对核心数据做太多花哨的事情。
现在,由于 NSPersistentDocument 在 iOS 中不可用,我碰壁了。我试图通过使用#if TARGET_OS_MAC and TARGET_OS_IPHONE 来解决这个问题,并以这种方式使其成为iOS 版本中UIManagedDocument 的子类。这显然会很方便,但我似乎无法让它像那样工作。而且它看起来真的很乱,因为还有很多其他的东西也需要条件化。
我也尝试在 NSDocument/UIDocument 之上构建类,自己实现核心数据挂钩,但它看起来也很混乱,让我觉得这不是正确的方法。
问题:
对我来说,在 iOS/mac 版本之间重用相同的文档类似乎是个好主意,但也许我太天真了。
最好的方法是什么?
我是否应该忘记代码共享并为 iOS 版本创建一个单独的文档类来模拟 mac 版本中存在的所有方法?
【问题讨论】:
-
我无法谈论这个特定场景,但考虑一般情况可能会有所帮助:您有两个必须继承自不同超类的类,但您有想要在它们之间共享的代码.对此(在 ObjC 中)的通常答案是组合:将共享代码放入不同的类中,并从两者中引用该类的实例。
-
这似乎是个好主意。请张贴是一个答案,我会选择它。一个后续问题,似乎我在我的复合对象中编写了 20-30 个方法,这些方法只将它们转发到专用接收器上完全相同的方法。有没有更好的办法?
标签: cocoa core-data nsdocument