我正在尝试掌握代码数据迁移,它对于支持我的应用程序非常重要。我需要迁移的原因是保留数据。我的应用程序用于心理研究和收集反应时间数据。我有一个游戏会话,每个游戏会话都有一系列动作。每一步都有一些属性。其中一个属性是interval: Date
。在商店版本1中,它被命名为 date ,在版本2中,我将其重命名为 interval ,并将属性的模型版本标识符更改为 date。
应用程序在启动时没有崩溃,但是当我尝试查看旧日志时崩溃。我有UITextView
,我会像这样显示所有日志:
textView.text = "Interval = \(move.interval)"
如果我创建新游戏会话并将查看其日志 - 该应用程序可以正常工作。
保护用户的最佳方法是什么?我应该在我的应用程序中添加额外的逻辑吗?如何在重命名属性后显示旧数据?
更新
控制台中没有消息,应用程序停止使用代码行更新UITextView
,它以绿色突出显示,并显示错误消息:
Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)
答案 0 :(得分:0)
我从头开始尝试,而不是重命名变量,我创建了新的变量。这次应用程序没有崩溃。对不起,这不是真正的答案,但它帮助我继续前进。
我学到的经验教训:
label.text = "number = \(object.number)"
这样做:
label.text = "number = \(object.number.integerValue)"
这个给了我相同的崩溃消息,但是如果您使用NSDate
则不会有问题。
重命名变量时仍然有问题。当我今天再次应用我的提交时,我正在使用Can't find model for source store
消息开始崩溃。模拟器中的应用程序已更改,因此看起来我无法再重现此问题,而是换了一个新问题。
<强>更新强>
我有更多练习,我认为我能够修复上述崩溃。
我添加了下一个数据模型版本 - 版本3并引入了新变量。我之前做过,将当前版本从2切换到3.然后应用程序在Can't find model for source store
启动时开始崩溃。我注意到,当我删除引入的变量时,应用程序没有崩溃。我发现我的核心数据无法迁移到版本3,因为它已经在版本3上了:
我采取了哪些措施来解决这个问题:
更新2
我再次遇到这个问题,我的回答没有帮助。在我上面描述的所有内容之后仍然是事件。
我发现this answer这次最终解决了这个问题。秘诀是新属性不应该是可选的,它们应该有默认值。