我已经创建了一个使用Core Data的基于文档的应用程序。我首先创建了mac版本,现在它工作正常,我正在创建它的iOS版本。在NSDocument和UIDocument之间共享代码
我只是无法弄清楚如何最大化iOS/mac版本与Core数据位之间的代码重用,因为它们不使用相同的类。
我的文档类处理保存,这是NSPersistentDocument
的子类。我的意图是,一个设计良好的模型类应该可以在两种环境中工作,特别是因为我不会在Core数据方面做所有的事情。
现在,由于NSPersistentDocument
不适用于iOS,因此我撞墙了。我试图通过使用#if TARGET_OS_MAC and TARGET_OS_IPHONE
来解决这个问题,并且以这种方式使它成为iOS版本中的UIManagedDocument
的子类。这显然会很方便,但我似乎无法像这样工作。它看起来非常混乱,因为还有很多其他的东西需要进行条件化。
我也尝试在NSDocument
/UIDocument
之上构建类,而不是自己实现Core数据钩子,但它看起来相当混乱,让我觉得这不是正确的路。
问题:
对我来说,这似乎是一个好主意,重新使用的iOS/Mac版之间相同的文档类,但也许我太天真。
这样做的最好方法是什么?
我是否应该忘记代码共享并为模拟Mac版本中所有方法的iOS版本创建单独的文档类?
我不能说这个特定的场景,但是考虑一般情况可能会有所帮助:你有两个类必须从不同的超类继承,但你有你想要在它们之间共享的代码。这种(在ObjC中)的通常答案是组合:将共享代码放入不同的类中,并从两者中引用该类的实例。 – rickster 2012-03-26 22:51:34
这似乎是一个好主意。请发布是一个答案,我会选择它。一个后续问题,似乎我在我的复合对象中编写20-30个方法,只将它们转发到专用接收方的完全相同的方法。有没有更好的方法? – Frost 2012-03-27 15:40:37