我有一个非常大的项目,我在重构会议中是对的。一开始我的想法对我来说听起来不错,但现在我在git rollback之前陷入困境和困惑。你们是我的最后一次机会。
我们已经完成了一个GUI应用程序,它显示了一些生活在CoreData中的数据。后台进程不时从网络获取数据并将它们放入CoreData。
所以我收到了请求 - >推进CoreData和< - 将其发布到GUI上。 这对我们非常有益。这是直截了当的,没什么特别的。 My Company自1月份开始编写此应用程序,请求和数据部分变得庞大。我们还有100%的测试覆盖率! \ O /。在那个项目中工作可能会很好......如果...如果GUI的东西可以分开。 随着时间的推移,我必须将开发团队分成两部分:一部分用于gui(以及几个基于相同数据模型的gui应用程序)第二部分用于Request-and-CoreDate部分。我的模型界面足够干净,有一个很好的入口点,所以我想我可以很容易地将Request和CoreData部分移动到我的Workspace中的库项目中。
嗯,好吧。没有!我将Kit.xcdatamodeld放入新的库项目中。我生成所有模型并将主应用程序中的所有代码添加到lib中。我解决了每个问题,并开始将第一个基本测试移到新项目中。
我将ApplicationDelegate中的managedObjectModel部分放入新项目中的DataController中。并更改了第一次调用以从新类中使用此managedObject。
let dc = DataController()
_ = GlobalScope(context: dc.managedObjectContext!)
当我运行第一个应该存储一个简单实体的测试而不是在managedObjectModel中发生错误时:
lazy var managedObjectModel: NSManagedObjectModel = {
// The managed object model for the application. This property is not optional. It is a fatal error for the application not to be able to find and load its model.
let modelURL = NSBundle.mainBundle().URLForResource(" <LibName>Kit", withExtension: "momd")!
return NSManagedObjectModel(contentsOfURL: modelURL)!
}()
fatal error: unexpectedly found nil while unwrapping an Optional value
我的问题是:是否可以将整个CoreData内容整合到框架中?我的gui应用程序中没有任何数据模型或请求?该计划是包含框架并使用我的模型的getXY()setXY()函数。此外,整个网络后台获取应该是框架中的位置。 但它认为框架中没有mainBundle。那么如何以正确的方式获得数据库?
非常感谢你。 PS
答案 0 :(得分:1)
首先,Core Data已经是一个框架。您希望将您的图层置于Core Data之上。可能吗?可能,但这不是一个好主意。
将第三个(或更多)应用程序放入框架中没有任何价值。它不会使任何东西更清洁或更容易。实际上,它会使您的应用程序调试更加困难。
使用Xcode中的组分离代码并在那里调用它。试图将事物放入单独的Xcode项目(这是你需要的)会导致更多的问题而不是它的价值。
BTW,没有办法将模型编译到框架中,因为这是一个独立的文件。因此,您的主要应用程序无论如何都需要嵌入模型文件。您可以探索创建自己的自定义CocoaPod结构,但同样,它确实不值得,可维护性会降低。
答案 1 :(得分:1)
问题在于这一行:
let modelURL = NSBundle.mainBundle().URLForResource(" <LibName>Kit", withExtension: "momd")!
它正在查找该资源的主要包,但不存在。您将要使用bundleWithIdentifier或bundleForClass,例如:
let modelURL = NSBundle(identifier:"com.whatever.yourFrameworkIdentifier").URLForResource...