问题标签 [mogenerator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
97 浏览

ios - CoreData + mogenerator - 如何防止中间数据模型中的`setValue(forKey :)`引用最终数据模型中实体的'人类'类?

我将 Core Data 与 mogenerator 结合使用来管理一个相当大且高度链接的数据对象图。

由于过去一些不幸的设计决策(将数据存储为Transformable对象),我在执行迁移时遇到了内存问题;迁移非常困难,以至于轻量级无法涵盖它,并且自定义迁移尝试将所有内容加载到内存中并且惨遭失败。

基于 Marcus Zarra 的优秀Core Data 书籍,我调整了他的渐进式迁移方法,以便能够根据轻量级、自定义或“编写自己的”迁移策略混合和匹配连续的迁移过程。我正在使用它来创建一个中间数据模型,在该模型中我加载我的“大数据”对象并将其写入磁盘上的外部文件,然后只保留该文件的 url。

基本上,这看起来像这样:

在两次轻量级迁移之间,我将 a连接到中间模型,使用,NSPersistentStoreController获取需要更改的对象;将数据写入磁盘上的文件并取消存储在对象本身中的数据,在此期间我定期保存 moc 并对处理的对象进行故障排除。fetchLimitfetchBatchSize

这工作得很好..但是......迁移的另一部分工作得不是很好,我已经删除了一个关系并将其替换为 mogenerated 文件的“人类”类中的计算属性。即

遵循相同的原则,在“v1.5-to-v1.5”传递中,我将存储的信息移动myRel到不同的级别,并尝试将关系设置为nil之后。使用数据模型 v2 的应用程序仍然myRel使用相同的接口访问引用的对象,因为我已将其添加为检索移动数据的计算属性。

这是执行此操作的代码:

最后一行导致运行时崩溃,显示一个堆栈跟踪,该堆栈跟踪导致为最终模型版本生成的“对象”文件生成器,而不是为此中间模型

这自然会崩溃,因为我正在处理的数据模型不包含我的计算属性中引用的实体myRel(这些实体仅存在于数据模型 v2 上)

这让我感到惊讶,我NSFetchRequest特别构造了这个<NSManagedObject>,希望“切掉”MyEntity类的底层动态逻辑,但似乎 Core Data/Swift 会根据实体名称/描述推断运行时类型。有什么办法可以规避这种情况吗?

我也尝试过使用setPrimitiveValue,但这会导致我的 moc 错过更改我对对象所做的更改不会以这种方式保存。

0 投票
1 回答
256 浏览

macos - 如何在 Mac OS 10.14.4 中安装 mogenerator

在终端中写入以下命令后,我无法安装 mogenerator

并得到类似的错误-bash: brew: command not found

你能为我提供所有过程的步骤吗?

0 投票
0 回答
38 浏览

ios - Xcode 在构建时自动删除 Tools/mogenerator

昨天,在没有挑衅的情况下,Xcode 开始Tools/mogenerator在我每次构建时自动删除我项目中的文件。当我丢弃生成的 git 删除(放回文件)并重建时,Xcode 会立即再次删除该文件。我的项目中的运行脚本需要此文件,因此删除它显然会破坏我的构建,但似乎无法说服 Xcode 将其留在它所属的位置。

我有:

  • 清理和重建
  • git clean -fdx
  • 已删除Xcode/DerievedData
  • 重新启动我的机器
  • 核对并重新克隆了 repo
  • 将 repo 克隆到不同的文件夹中
  • 更新了 Xcode
  • 卸载并重新安装 Xcode

我已经多次完成其中的大部分。

我是我团队中唯一遇到这个问题的人,并且一个干净的 repo 克隆给了我完全相同的问题,所以我相信它与我的代码没有任何关系。它必须在我的环境中。但我不记得做过任何会像这样影响我的环境的事情。昨天我构建没有问题,5分钟后我再次构建并且发生了这种情况。我没有改变任何东西。

我和我团队中的所有其他工程师一样完全不知所措。我们之前没有人见过这样的事情,我们尝试过的任何事情都没有奏效。这听起来很熟悉吗?我可以采取其他步骤来清洁我的环境吗?

更新

看来 Mogenerator 目标中的这个运行脚本是造成问题的原因。最初我认为它有效,因为它是唯一引用的东西Tools/mogenerator,但事实证明,当我删除它时,文件根本没有被删除,一切正常。我团队中的其他人都有完全相同的脚本,所以我不知道为什么它只会对我造成问题。

Tools/mogenerator -m Inspirato/Inspirato.xcdatamodeld --machine-dir Inspirato/Model/Generated --human-dir Inspirato/Model --swift --template-var arc=true --template-var scalarsWhenNonOptional=true