核心数据迁移后出现 NSRangeException

2024-06-19

在向我的应用程序添加新的核心数据模型版本后,我执行了轻量级迁移,显然成功了。迁移的文件加载正常,但在第一次尝试通过特定关系访问属性时,应用程序崩溃并显示NSRangeException: '*** -[__NSArrayM objectAtIndex:]: index 4294967295 beyond bounds [0 .. 35]'。这种关系在迁移之前运作良好。我从这里的其他帖子知道 4294967295 确实是-1,但我唯一可以识别的应用程序/数据中的 36 个项目是数据模型中总共有 36 个实体(作为参考,正在获取的关系的表中有 58 个项目)。

问题:

我的问题是:根据我收到的错误和我在下面完成的故障排除,是否有一种模式更改可以通过轻量级迁移,但会破坏数据,从而导致上述异常?我将尝试将迁移分解为多个版本的较小块,以隔离或避免问题,但如果能够专注于可能出现错误的特定架构更改,那就太好了。

失败:

“myobject”中的以下代码发生故障:

[[self object2] text];

object2 关系是一对一的,双向都是非可选的,并且数据模型之间的正向或反向关系都没有改变。这text属性可能不相关,因为当错误发生时,awakeFromFetch未到达 object2 中。如果我分配[self object2]对于上述语句之前的变量,赋值成功并报告data: <fault>.

数据库:

查看 sqlite3 中的数据库,我注意到以下内容:

  1. 每个表中正向和反向关系的索引值似乎都是正确的。
  2. object2 表有两列用于反向关系,而不是迁移之前的一列 (ZMYOBJECT和以前一样以及附加的Z2_MYOBJECT,所有行均为空)。没有添加其他关系来解释此列。
  3. In the Z_PRIMARYKEY表,迁移后显示的所有条目-1 for Z_MAX,而在迁移之前,它们显示空表为零,而填充表显示最大行数。手动更新Z_MAX正确的值对解决异常没有帮助。全部Z_SUPER值是正确的。

我建立了一个映射模型来查看自动映射是否有任何问题,但一切看起来都很好。

整体架构变化:

在数据模型的源版本中,有 14 个实体,其中只有 4 个已填充数据(该应用程序仍在开发中)。七个是顶级实体,七个是三个顶级实体的子实体。

在数据模型的目标版本中,添加了 22 个实体,其中一些是顶级实体,一些是子实体,具有数十种关系,包括一些添加到现有实体的关系。

从现有实体中删除了一些属性和关系,并添加了其他属性和关系。没有更改数据类型或关系设置,没有重命名属性或关系,也不需要特殊映射。

更新(2/25/12):当我开始研究新的中间模型时,我记得我已将许多实体的类(representedClassName)从 NSManagedObject 更改为 NSManagedObject 子类,但没有生成类文件。我并不怀疑这会导致问题,而且事实上,创建所有类文件对解决该异常没有帮助。我只是想指出这是模型之间的另一个变化。

结论:

这是一个大胆的猜测,但如果 36 个实体计数不是巧合,那么似乎当“myobject”尝试在“object2”中出错时,它没有对该表的有效引用,并且正在尝试加载表号 -1 ,导致异常。事实上,一个简单的赋值[self object2]然而,成功并不符合这个结论。

有任何想法吗?


通过几次增量迁移,我能够确定导致问题的原因以及解决方案。

问题:

具有数据的现有实体之一在当前模型中没有子实体。如果我创建一个新模型,仅添加一个子实体,不包含任何属性或关系,并且不进行其他更改,则 NSRangeException、Z_MAX 观察以及我的问题中提到的逆关系加倍都会发生。

解决方案:

在观察上述案例的“成功”轻量级迁移后的失败之后,我创建了一个映射模型。由于唯一的变化是增加了一个实体,因此除一个之外的所有实体映射都很简单。问题是如何处理单个添加的实体。

默认情况下,添加的实体本身没有属性或关系,会显示所有父级属性的属性和关系映射。默认情况下,所有映射都有空值表达式,我认为这意味着它会在迁移过程中跳过它们。显然,这不是真的。通过删除实体映射中的所有属性和关系映射,然后关闭推断映射,迁移成功进行。

我仍然需要处理所有剩余的实体,并将尝试这种方法来批量完成其余的工作,并保持所有计划的属性和关系完好无损。

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

核心数据迁移后出现 NSRangeException 的相关文章

  • 在 iPhone 上下载、保存和播放 mp3

    我想从某个网站下载 mp3 文件 将其保存到我的 CoreData 模型 AudioMp3 中 然后播放 下面的函数可以工作 但首先 效率低下 因为它必须首先将 mp3 保存到文件 其次 它在接下来的调用次数中重复播放相同的 mp3 我认为
  • +entityForName: nil 不是搜索实体名称“Account”的合法 NSManagedObjectContext 参数

    我尝试了很多选择 但找不到解决这个问题的方法 我创建了一个核心数据文件并将实体命名为帐户 创建了一个名为用户名的字符串属性 然后将实体的类编辑为NSManagedObject 不确定这是否正确 现在 以下代码位于我的 LoginViewCo
  • 有什么方法可以限制核心数据中的重复条目吗?

    我一直在尝试在核心数据中添加对象 所以 我希望它不应该允许核心数据存储中出现重复的条目 怎么做 这是我与保存数据相关的代码 IBAction save id sender if name text isEqualToString addre
  • 将 iCloud 数据迁移到本地存储并阻止 iCloud 继续响应

    我即将在我的应用程序中完成 iCloud 和 Core Data 的实现 这是一款仅限 iOS 7 的应用程序 我在应用程序中为用户提供了一个选项 以 打开 或 关闭 的形式显示 使用 iCloud UISwitch 该应用程序启动时会询问
  • 编译托管对象模型时有什么方法可以忽略丢失的反向警告吗?

    标题几乎包含了问题 我们发布了一个应用程序 其数据模型的逆配置不正确 我们在下一个版本中使用新版本的数据模型修复了这些问题 但 Xcode 在编译以前的数据模型版本时仍然显示警告 我不想破坏将文档从旧数据模型迁移到新数据模型的能力 并且我非
  • iOS 5 核心数据冻结

    我尝试做以下简单的事情 NSArray entities context executeFetchRequest inFetchRequest error fetchError 没有什么花哨 但这在 iOS 5 中冻结 在 iOS 4 中工
  • Core Data 与 SQLite 3 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • C# 或 Windows 相当于 OS X 的 Core Data?

    我迟到了 现在才开始在 OS X Cocoa 中使用 Core Data 它令人难以置信 并且确实改变了我看待事物的方式 C 或现代 Windows 框架中是否有等效的技术 即拥有可免费保存 数据管理 删除 搜索的托管数据类型 还想知道Li
  • Swift:在 Core Data 中存储自定义类的数组

    我是核心数据新手 但对于我的一个新项目 我想将我的数据保存到核心数据 我想创建一个 Reptile 类 其中包含几个自定义类数组 如果没有核心数据 我会得到这样的东西 import Foundation import UIKit class
  • iCloud 超时。 (使用iCloud + Core Data + Magical Record

    我开始了一个应用程序测试来使用Core Data and iCloud 使用魔法记录 经历了一番配置之后Provisioning Profiles和权利 应用程序终于运行了 一段时间后 应用程序崩溃并抛出此消息 2012 12 31 03
  • NSPredicate predicateWithFormat 传入属性名称

    关于 NSPredicate 的简单问题 我正在尝试使用 传入 值构建我的谓词 如下所示 NSPredicate currentPredicate NSPredicate predicateWithFormat key changesDic
  • 使用 in 子句按数组顺序对 NSPredicate 进行排序

    我有一个NSPredicate会在一个内搜索 idNSArray的 ID 就像是 id in array 有没有办法获得按相同数组顺序排序的提取结果集 我现在的代码是 NSArray findIn NSArray identifiers i
  • 检查 coredata 对象是否为零

    我想找出核心数据中的对象 我的代码 Types signedDate Date alarmDate Date starTime 国家标准日期 endTime NSDate NSString str signedDate gt AND sig
  • 魔法记录未保存

    我正在使用魔法记录 https github com magicalpanda MagicalRecord https github com magicalpanda MagicalRecord 我正在尝试使用 Magical Record
  • 更新/编辑 coreData 管理对象

    当用户单击 UITableView 中基于 cell accessoryType 的单元格时 我尝试编辑 CoreData 对象 以显示该项目是否已被单击 这是当前的代码 void tableView UITableView tableVi
  • 核心数据和 BOOL 设置

    我正在开发一个使用 Core Data 作为后端来管理 SQLite 记录的应用程序 我可以使用字符串和数字进行所有操作 但刚刚尝试添加 BOOL 字段 但似乎无法正常工作 在 xcdatamodel 中 我向我的对象添加了一个名为isCu
  • CoreData 获取属性的不同值

    我正在尝试设置我的NSFetchRequest核心数据以检索实体中特定属性的唯一值 IE 具有以下信息的实体 name rate factor John 3 2 4 Betty 5 5 7 Betty 2 1 2 Betty 3 1 2 E
  • Core Data轻量级迁移:无法找到或自动推断迁移的映射模型

    因此 我创建了数据模型的新版本 并将以前的可选字段设为非可选 为其指定默认值 根据文档 这应该意味着我的迁移符合轻量级自动迁移的条件 我还添加了在打开商店时允许执行此操作的选项 同样根据文档 NSDictionary options NSD
  • iOS8 CoreData“使用未实现的初始化程序”

    我尝试运行我的应用程序时收到以下错误 致命错误 对类 rcresttest CatalogItem 使用未实现的初始化程序 init entity insertIntoManagedObjectContext 我可以通过将数据模型中的实体类
  • 为什么我需要 2 个或更多核心数据模型?

    我很想知道谁使用多个核心数据模型以及为什么 有什么好处 我正在开发一个应用程序 我认为我可以从多个模型中受益 但我不确定其他好处 我即将推出的应用程序将适用于 iPad 和 iPhone 的另一个版本 iPad 有 3 个主要内容 iPho

随机推荐

  • SFML 纹理显示为白框

    我在基类中有一个纹理和精灵 正在由另一个类扩展 但是在绘制时 精灵显示为白色框 我知道这与精灵失去与纹理对象的链接有关 但我对 C 有点陌生 所以我不太确定它是如何发生的 这是代码 我删除了一些不相关的部分以减少大小 拾取 h ifndef
  • 用于开发和生产的不同种子

    根据构建配置 调试 发布 使用实体框架 6 以不同方式为数据库设定种子的推荐方法是什么 现在我正在使用 MigrateDatabaseToLatestVersion 初始值设定项 在开发过程中 我喜欢在数据库中使用虚假数据进行测试 因此 我
  • 如何在 Struts 2 OGNL 中将参数传递给方法调用

    我想使用属性作为对象方法的参数
  • 使用 Tkinter 打开网页

    因此 我的应用程序需要能够打开其中的单个网页 并且它必须来自互联网并且未保存 特别是我想使用 Tkinter GUI 工具包 因为它是我最熟悉的工具包 最重要的是 我希望能够在窗口中生成事件 例如单击鼠标 但无需实际使用鼠标 有什么好的方法
  • 如何在 Eclipse 中以编程方式关闭编辑器 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 当我们删除一个项目 IProject 时 我们想关闭它的所有打开的文件 我可以通过项目的成员方法访问 IFiles 我想关闭已删除项目的所有
  • MATLAB 类的 Description 和DetailedDescription 属性

    内置 MATLAB 类具有 Description 和 DetailedDescription 属性的值 gt gt handle ans meta class handle Package meta Properties Name han
  • AdMob 插页式广告仅显示一次

    当广告在一个会话内第二次或第三次打开时 LogCat 会显示错误消息 尝试使用不同的广告管理器启动新的 AdActivity 我通过应用程序主屏幕的 on resume 方法中的意图启动插页式广告 Override public void
  • Python speedtest.net,或等效的[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 是否有一个 Python 库可以实现 SpeedTest net 测试或等效的互联网连接速度测试 GitHub上有一个项目叫速度检查 https gi
  • 用 java 编写解释器时的 switch 或 if 语句

    当前的作业需要我编写一个程序 以一种非常微小且基本的编程语言 行为有点像 FORTRAN 来读取包含指令的文件并执行这些指令 基本上它是我猜的语言的简单解释器 它是完全线性的 所有语句都是按顺序定义的 并且只有字符串和整数变量 我需要查找和
  • 获取请求的客户端 IP 地址而不是 Cloudflare 的 IP 地址

    Cloudflare 会更改传入请求的 IP 地址 因为 Cloudflare 是我的网站和互联网之间的中间件 代理 我该怎么办获取请求的初始IP地址 而不是 Cloudflare 的 IP 地址 我听说过mod cloudflare但是这
  • 使用 JQuery 选择表行并选中复选框

    我有一个表 我想选择满足我的条件的行并选中它们各自的复选框 假设我想获取带有日期的行2013 03 21 我怎样才能使用 JQuery 来做到这一点 table tr td Record1 td td 2013 03 21 td td td
  • 无法在 Mac 上启动 MySQL

    使用 Brew 安装后 我无法运行 MySQL 我使用的是 OS X El Capitan 版本 10 11 3 和 MySQL Server 版本 5 7 11 当我启动服务器时 我收到 启动 MySQL 错误 服务器退出而不更新 PID
  • 将 value 转换为 bool 的魔法

    今天我意识到将值转换为 bool 是一种魔法 int value 0x100 unsigned char uc static cast
  • 通过eclipse运行ant找不到环境变量,但是通过终端运行ant就可以了

    当我通过 Eclipse 运行 ant 时 一些目标构建得很好 但那些需要特定环境变量 即我在 profile 文件中设置的 SOME SDK 的目标将无法工作 即使我尝试回显 env JAVA HOME Ant 通过 eclipse 也只
  • 如何使用 iOS 可达性

    我正在开发一个使用网络的 iPhone 应用程序 iPhone 通过 HTTP 请求与我的服务器通信 并且应该可以在 WiFi 和 3G 上运行 我目前使用NSURLConnection initWithRequest向我的服务器发送异步请
  • PHP - 当 false 时获取 bool 来回显 false

    以下代码不会打印出任何内容 bool val bool false echo bool val 但下面的代码打印1 bool val bool true echo bool val 有没有更好的打印方法0 or false when boo
  • 防止 FragmentPagerAdapter 中的 WebView 重新加载?

    我有一个 FragmentPagerAdapter 用于显示大约 6 个选项卡 所有选项卡都从 Web 服务器加载数据 其中一个选项卡包含一个从我的服务器加载图像的 WebView 生成图像的服务器端成本很高 因此我想减少重新加载 WebV
  • ASP.NET MVC 3 - microsoft-web-helpers v1.1 的问题

    我从 nuget 升级了我的 microsof web helpers 软件包 它本身依赖于 facebook 和 twitter API 现在 当我的应用程序尝试运行时 出现以下错误 编译器错误消息 CS0246 找不到类型或命名空间名称
  • 将数组转换为具有默认值的对象的更简洁方法? (洛达什可用)

    我有一个数组 比如说 a b c 我想将其转换为一个对象 该对象以数组值作为键和我可以设置的默认值 所以如果默认值是true 我希望我的输出是 a true b true c true 下面的代码是否有更简洁的版本来实现此目的 var my
  • 核心数据迁移后出现 NSRangeException

    在向我的应用程序添加新的核心数据模型版本后 我执行了轻量级迁移 显然成功了 迁移的文件加载正常 但在第一次尝试通过特定关系访问属性时 应用程序崩溃并显示NSRangeException NSArrayM objectAtIndex inde