核心数据迁移技术:移动属性 -> 建模关系

2024-01-07

我有一个相当大的基于核心数据的数据库模式(约 20 个实体,超过 140 个属性),当它从 1.x 代码库迁移到 2.x 代码库时,它正在经历巨大的变化。

我非常熟悉执行轻量级迁移,但我对这种特定的迁移有点困惑,因为有一些实体用于将相关对象存储为实体本身的可转换属性,但现在我想将它们迁移到实际实体。

这似乎是一个perfect何时应该使用重度迁移而不是轻量级迁移的示例,但我对此也不太满意。我不熟悉大量迁移,发生此数组 -> 建模关系转换的实体之一占用了数据库中约 90% 的行,这些数据库的大小往往超过 200 MB,我知道我们很大一部分客户正在使用 iPad 1。再加上 Apple 文档和 Marcus Zarra 的(优秀的)Core Data 书中关于大量迁移的速度和内存使用情况的反复警告,让我very保持警惕,并寻找另一种方法来处理这种情况。

WWDC 2010 的“掌握核心数据”会议 118 (幻灯片在这里 http://adcdownload.apple.com//wwdc_2010/wwdc_2010_video_assets__pdfs/118__mastering_core_data.pdf,需要登录,倒数第 9 张幻灯片,标题为“迁移后处理”就是我所指的)提到了一种解决此问题的方法 - 执行迁移,然后使用存储元数据来标记是否或您想要执行的自定义后处理尚未完成。我认为这可能是可行的方法,但对我来说感觉有点老套(因为缺乏更好的词)。另外,我担心留下一些实际上已被弃用的属性。前任。如果我将实体 foo 的 barArray 属性移入实体 foo 和实体 bar 之间的关系,并且将 barArray 置空,则 barArray 仍然作为可写入和读取的属性存在。解决这个问题的一个潜在方法是通过将它们的名称更改为前面“已弃用”来表明这些属性已被弃用,并且可能覆盖访问器以断言它们是否被使用,但使用 KVO 时,无法保证编译-时间解决方案将阻止人们使用它们,而且我讨厌留下“陷阱代码”,特别是因为只要我可能有仍然需要从 1.0 迁移的客户,就必须存在所说的“陷阱代码”。

这变成了比我预想的更多的脑转储,所以为了清楚起见,我的问题是:
1) 考虑到我工作的限制,大量迁移是否是一个特别糟糕的选择? (业务关键型应用程序、缺乏大量迁移经验、数据库大小超过 200 MB、数万行、使用运行 iOS 5+ 的 iPad 1 的客户)
2) 如果是这样,第 118 节中描述的迁移后处理技术是我最好的选择吗?
3)如果是这样,我如何立即/最终消除那些“已弃用”的属性,以便它们不再污染我的代码库?


我的建议是远离大量移民;句号。它在 iOS 上太昂贵,并且很可能会导致不可接受的用户体验。

在这种情况下,我会进行惰性迁移。创建具有关联对象的轻量级迁移。

然后进行迁移但是还不要移动任何数据.

更改该新关系的访问器,以便它首先检查旧的可转换对象,如果可转换对象已填充,它将提取数据,将其复制到新关系,然后将可转换对象置为 nil。

这样做会导致数据在使用时移动。

现在这个设计存在一些问题。

如果您想对这些新对象使用谓词,那将会变得……混乱。您将需要进行两遍提取。i.e.使用不会命中该新对象的谓词进行提取,然后在它们进入内存后进行部分提取,以便将可转换对象移过去。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

核心数据迁移技术:移动属性 -> 建模关系 的相关文章

  • 我可以在 Swift 3 项目中使用 Swift 2.3 框架吗?

    在我的项目中 我将所有私有 swift 2 3 文件迁移到 swift 3 我想使用用 swift 2 3 编写的遗留框架 直到它们有 swift 3 版本 我尝试添加 使用旧版 Swift 版本 是 清除 构建我的项目 但我仍然遇到一些麻
  • 将 UIPanGestureRecognizer 添加到 UIScrollView 时禁用滚动

    我有一个滚动视图 我想让它在平移完成时消失 它工作正常 平移时滚动视图消失 但问题是现在我无法滚动内容 UIView animateWithDuration 0 2 delay 0 2 options UIViewAnimationCurv
  • 如何在 SwiftUI 中将变量从一个视图传递到另一个视图

    我正在尝试将一个变量从一个视图传递到 SwiftUI 中的另一个视图 我有一个重置按钮 我想在另一个视图中将变量设置为零 我尝试在视图一中创建一个新结构并在视图2中访问该变量 View 1 State var count MyNumber
  • 如何在UiView中添加UIImagePickerController

    如何在TabBarApplication中的UiView中添加UIImagePickerController 无论您是否在选项卡中 此代码都会进入您视图的 ViewController 类 当您需要时创建一个选择器 UIImagePicke
  • Google Cardboard - Cardboard VR 套件有 iPhone / iOS 入门项目吗?

    我正在看Google Cardboard 套件 一种廉价的 VR 设置 https developers google com cardboard 使用 Android 设备玩 3d VR 游戏 我看到他们有一个 Android 演示项目
  • 使用自动布局时 UIScrollview 的中心内容

    我在项目中使用自动布局 并且有一个滚动视图 其中有一个居中的按钮 我已经让滚动视图滚动 但不占据整个屏幕 我尝试按照此处的教程进行操作 https developer apple com library ios technotes tn21
  • 在 iPhone 上下载、保存和播放 mp3

    我想从某个网站下载 mp3 文件 将其保存到我的 CoreData 模型 AudioMp3 中 然后播放 下面的函数可以工作 但首先 效率低下 因为它必须首先将 mp3 保存到文件 其次 它在接下来的调用次数中重复播放相同的 mp3 我认为
  • 定位精度定义 - iOS

    iOS 上返回的 准确性 或 不确定性 的统计意图是什么 即使是近似值 例如 Android 文档对其返回的精度数字进行了解释 从这个意义上讲 它大约是一个标准差 我们将准确度定义为 68 置信度的半径 换句话说 如果 您以该位置的纬度和经
  • 在 UITableViewCell 内动态更改标签宽度

    我正在尝试建立一个自定义表格视图 正如您在图片中看到的 我在故事板一侧将标签的宽度默认设置为 160 磅 并在加载表格时动态更改宽度 我通过修改 cellForRowAtIndexPath 委托方法来实现此目的 因此 根据日期的长度 我设置
  • 添加 AFNetworking 后出现 APPLE MACH-O 链接错误

    只是将 AFNetworking 添加到我的项目中 在 B R 后 我收到如下错误 Undefined symbols for architecture i386 SecCertificateCopyData referenced from
  • 设置UITextField的光标位置

    我查看了单点触控示例并尝试过 var range new NSRange selectionStart 1 NumberTextField SelectedTextRange IndexedRange GetRange range 但这会在
  • iOS5 和 Facebook API

    我想将我的应用程序与 Facebook 集成并从 github 下载 Facebook ios sdk 但是 该 sdk 适用于 Xcode 4 0 代码库 我正在使用 Xcode 4 2 for iOS 5 beta 5 应用程序 是否有
  • 在两个可移动 uiview 之间画线

    我有一个带有节点的 滚动视图 UIViews 可以拖动 我正在尝试在选定的之间绘制边缘UIViews使用 calayer 但我不知道当视图位置发生变化时如何重新绘制线条 In my viewControllerI 类在节点数组中添加第一个和
  • 使用什么来移动 UIView self.frame 或 self.transform 属性?

    这个问题我有点困惑 我知道我可以改变观点self frame origin 但我发现有一个名为 变换 的属性 我认为这是用于在屏幕上移动我的视图等 也许我有点不明白 所以我想知道 我必须使用哪个房产来搬家UIView 或者它的子类 另一个类
  • UIView 周围的虚线边框

    如何在周围添加虚线边框UIView 像这样的东西 如果您喜欢子层 还有另一种方法 在您的自定义视图的 init 中 输入以下内容 border 是 ivar border CAShapeLayer layer border strokeCo
  • Xcode 服务器 ibtool 构建失败

    我一直在研究使用 Xcode Server 进行 CI 我已经解决了一些问题 但现在有一个问题困扰着我 构建似乎工作正常 但在测试阶段挂起 并在日志底部生成以下内容 2015 11 25 14 44 45 650 xcodebuild 58
  • 如何使用固定宽度和自动布局正确缩放图像?

    我有一个动态 UIImage 和一个固定宽度为 280 0px 的 UIImageView 并且我正在使用自动布局 在 UIImage 视图上 我设置了宽度和高度约束 并降低了高度约束的优先级 我选择了 aspect fit 并将内容拥抱和
  • dyld:无法加载插入的库,但可以在模拟器和另一部 iPhone 上使用

    所以我在过去的几个小时里在我的应用程序上编码 在某个时候我决定在我的 iPhone 8 13 3 1 上启动我的应用程序而不是使用模拟器 13 3 它立即崩溃并出现以下错误 dyld warning could not load inser
  • 构建 iOS 应用程序后退出代码 1 错误

    我正在尝试使用 RestKit 构建我的项目 当我构建它时 我收到以下错误 我尝试使用 Apple LLVM 3 0 和 LLVM GCC 4 2 进行编译 两者都产生相同的结果 任何人有任何想法是什么导致了这个问题 Ld Users Ji
  • Swift:UICollectionViewCell didSelectItemAtIndexPath 更改背景颜色

    我可以轻松更改单元格的背景颜色CellForItemAtIndexPath method func collectionView collectionView UICollectionView cellForItemAtIndexPath

随机推荐