核心数据:-deleteObject:崩溃,删除规则是原因吗?

2024-03-20

我有以下模型,如图所示。

替代文本http://img521.imageshack.us/img521/9741/schermata20100224a12251.png http://img521.imageshack.us/img521/9741/schermata20100224a12251.png

我的应用程序需要刷新 B 的每个实例,因此每次viewWillAppear,我需要删除模型中的所有 B。删除B后,与C的关系的级联删除规则将删除所有C,然后级联到所有D。 A 和 E 是常数。

我对每个对象都有删除规则,如下所示:

A: b - Cascade
B: c - Cascade, a - Nullify
C: b - Nullify, d - Cascade
D: c - Nullify, e - Nullify
E: d - Cascade

or

A -(cascade)->> B -(cascade)-> C -(cascade)->> D -(nullify)-> E
A <-(nullify)- B <-(nullify)- C <-(nullify)- D <-(nullify) E

我在所有 B、C、D 上级联删除时遇到问题。我的 fetchRequest 对象返回 A 中 B 的每个实例,然后我调用-deleteObject:在来自 ManagedObjectContext 的每个 B 上。但调用 [managedObjectContext save:&error] 时出现 EXC_BAD_ACCESS.

有人可以告诉我我做错了什么吗?我在每个实体上的删除规则都遇到问题还是问题出在其他地方?处理三个对象 B、C、D 的级联删除的最佳实践是什么?

Edited:

这是引发错误时的堆栈跟踪:

  #0    0x01d843ae in ___forwarding___
  #1    0x01d606c2 in __forwarding_prep_0___
  #2    0x01c618b6 in -[NSFetchedResultsController(PrivateMethods) _managedObjectContextDidChange:]
  #3    0x0003263a in _nsnote_callback
  #4    0x01d4f005 in _CFXNotificationPostNotification
  #5    0x0002fef0 in -[NSNotificationCenter postNotificationName:object:userInfo:]
  #6    0x01bc217d in -[NSManagedObjectContext(_NSInternalNotificationHandling) _postObjectsDidChangeNotificationWithUserInfo:]
  #7    0x01c21763 in -[NSManagedObjectContext(_NSInternalChangeProcessing) _createAndPostChangeNotification:withDeletions:withUpdates:withRefreshes:]
  #8    0x01ba65ea in -[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:]
  #9    0x01bdc728 in -[NSManagedObjectContext save:]

这是当我尝试将 NSZombieEnabled 和 MallocStackLogging 设置为 YES 时控制台中的日志:

  2010-02-24 15:41:39.803 Foo[2591:207] deleting object: FUM5
  2010-02-24 15:41:40.515 Foo[2591:207] *** -[viewController controllerWillChangeContent:]: message sent to deallocated instance 0x7e54510

编辑 2:添加源代码

我尝试通过创建一个具有图像中确切架构的新项目来重新创建这种情况。你可以从这里下载 http://www.2shared.com/file/11640639/4e825b57/CoreDataTestDeleteRule.html。还有一个自述文本。希望我提供了足够的信息。


我相信问题可能在于 C 和 D 之间的必需关系。如果您将图表配置为:

  1. 每个 C 至少需要一个 D。
  2. C 的许多实例都指向同一个 D。

然后在某个时刻,C 可能会发现它所需的关系已被取消。如果它尝试访问 D,则会触发 EXC_BAD_ACCESS。 (如果每个E需要一个D,你可能会遇到同样的问题)

为了调试我建议,

  • 将关系 C-->D 设置为可选,然后查看错误是否消失。
  • 从 C-->D 开始,每次将级联更改为空 1,然后查看错误是否消失。
  • 如果您有类,请检查实例是否不共享实体图之外的某些公共对象。例如,C 类和 D 类都引用同一图像,但该图像不是实体的一部分。如果外部引用没有正确保留,也可能导致类似的崩溃。
  • 将您的保存移至删除每个 B 的调用之后。在删除之前记录每个 B 及其 C。这样您就可以准确地看到保存是否失败以及保存失败时图表处于什么状态。

Edit01:

好的,我看了你的代码,发现了问题。

问题是您将 A 的“b”关系设置为必需。当你删除 B 时,它会抛出此错误:

2010-02-24 16:14:02.064 CoreDataTestDeleteRule[20887:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=1580 UserInfo=0x3d0b450 "Operation could not be completed. (Cocoa error 1580.)"
2010-02-24 16:14:06.340 CoreDataTestDeleteRule[20887:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=1580 UserInfo=0x3d19980 "Operation could not be completed. (Cocoa error 1580.)", {
    NSLocalizedDescription = "Operation could not be completed. (Cocoa error 1580.)";
    NSValidationErrorKey = b;
    NSValidationErrorObject = <A: 0x3b2faf0> (entity: A; id: 0x3d05330 <x-coredata://6870AF7C-E28F-4B4E-80AB-09C648651179/A/p1> ; data: {
    b =     (
    );
    name = a;

(顺便说一句,数字核心数据错误代码的文本错误可以在CoreDataErrors.h.)

这是有道理的,因为您要求 A 有一个 b,然后删除所有 b。只需将 A->>B 关系设置为可选即可防止错误并允许代码正常运行。

您的代码还存在一些其他问题。一些自动生成的类没有正确显示。例如,B.h 的接口如下所示:

#import <CoreData/CoreData.h>

@class A;

@interface B :  NSManagedObject  
{
}

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) A * a;
@property (nonatomic, retain) NSManagedObject * c;

@end

当它应该看起来像:

#import <CoreData/CoreData.h>

@class A;
@class C;

@interface B :  NSManagedObject  
{
}

@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) A * a;
@property (nonatomic, retain) C * c;

@end

我不知道为什么他们没有正确生成。

我还建议不要使用短变量和类名。 Objective-c 具有全局名称空间,使用单字母符号会导致名称冲突。你永远不知道还有谁在匆忙。我建议使用旧的二战风格的拼音字母(现代的拼音字母也有碰撞的风险)并命名测试类:Adam、Baker、Charlie、David、Eddy 等。

看来我们都把注意力集中在了BC>D关系上,而忽略了看得更远的地方。这是军方“目标固定”的程序员调试版本。你陷入了对问题的一个概念之中,无法摆脱。

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

核心数据:-deleteObject:崩溃,删除规则是原因吗? 的相关文章

  • WKWebView不加载https URL?

    我有一个 WKWebView 应该加载以下网址 https buchung salonmeister de place offer details page id 907599 venueId 301655 她是我使用的代码 import
  • 在后台轮询服务器的正确方法

    假设这是可能的 我希望我的 iOS 应用程序在后台时轮询服务器 即基本上每 30 分钟检索一次 URL 的内容 并通知用户是否包含 有趣 的内容 基本上以类似的方式如果您不使用推送通知 则内置邮件客户端假定的工作方式 现在 从我到目前为止的
  • 显示仅允许数字和小数点的输入?

    有什么方法可以定义一个
  • 如何将 UIPopoverPresentationController 的高度设置为与 UITableView 相同

    我在我的应用程序上使用 UIPopoverPresentationController 在我的 iPhone 上显示弹出窗口 使用 UIModalPresentationNone 我希望尺寸随着 UITableView 的高度而动态变化 但
  • 如何通过填充 NSDictionary 以 JSON 格式发送 UIImage

    我正在尝试使用 JSON 将数据发送到服务器 我可以使用我的对象和关键参数创建 NSDictionary 但我想发送我的图片 图片是UIImage NSDictionary mainJSON NSDictionary dictionaryW
  • UITableViewCell 的 viewDidAppear

    我通常使用viewDidAppear方法在视图完成出现后在视图上执行一些 UI 操作 我在各种情况下使用了此方法 它非常有用 但是 我需要在视图上进行一些 UI 更改UITableViewCell当它完成出现后 SDK中是否有任何可用的方法
  • 在iPhone上将CSV文件读入sqlite3

    有没有办法在iPhone上将CSV文件读入sqlite3 sqlite3 是否有类似于 SQL 命令的功能 LOAD DATA LOCAL INFILE file csv INTO TABLE TABLENAME FIELDS TERMIN
  • 创建自定义 MCBrowserViewController

    有没有办法创建一个UITableView包含在中找到的相同信息MCBrowserViewController 我当前的代码只允许推送与我的应用程序设计不同的标准视图 self browserVC MCBrowserViewControlle
  • 在运行时动态创建核心数据模型

    是否可以在运行时从服务器上的一组实体生成核心数据模型 例如SharePoint 列表或 SQL MySQL Parse 我正在尝试采用动态路线 因为 SharePoint 列表 SQL Parse 中的字段可能会在将来随时添加 这意味着应用
  • iPhone - 创建自定义 UITableViewCell 顶部和底部边框

    我一直在到处寻找 但还没有找到我的答案 我使用 JSON 中的动态单元格填充 UITableView 并尝试隐藏任何额外的单元格 我关闭了IB中的分隔符 当然所有的单元格分隔符都消失了 如何在每个 tableviewcell 的底部和顶部添
  • 如何以编程方式设置设备(UI)方向?

    希望屏幕 UI 上的所有内容都能够从横向左向右旋转 反之亦然 我该怎么做呢 这是私人的吗 我知道 BOOL shouldAutorotateToInterfaceOrientation UIInterfaceOrientation inte
  • 如何将图像放入此 UIPickerView 中?

    我不知道如何创建一个在文本一侧带有图像的自定义 UIPickerView 我一直在寻找一种方法 我刚刚发现了这个 UIView pickerView UIPickerView pickerView viewForRow NSInteger
  • 如何开始复杂级别的跨平台移动应用开发? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在iOS中处理1到3个手指的滑动手势

    我使用以下代码来处理代码中的 1 根手指滑动 UISwipeGestureRecognizer swipe UISwipeGestureRecognizer alloc initWithTarget self action selector
  • 在 iPhone 3GS 与 iPhone 4 上为 Mobile Safari 嵌入 HTML5 视频

    我在服务器上的 mp4 文件中有 H 264 AAC 编码的视频 mime 类型的视频 mp4 添加到 Web 服务器 IIS 7 并且我有一个带有视频标签的页面
  • UITableViewCell显示多种字体

    我想在 uitableviewcell 中以类似于 iPhone 地址簿的不同字体显示两个单词 例如 约翰Buchanan 您应该使用两个 UILable 或者您可以使用OH属性标签 https github com AliSoftware
  • 编码时捕获 NS_AVAILABLE_IOS

    我知道如何更改支持的最低操作系统IPHONEOS DEPLOYMENT TARGET 我目前正在 Xcode 4 5 下进行开发并使用 iOS 6 0 SDK 我想做的是找到一种方法 每当我使用标记的代码时在编译中抛出警告 NS AVAIL
  • 一次播种多行 laravel 5

    我目前正在尝试为我的用户表播种 如果我像这样尝试 2 行 就会失败 如果我只使用单个数组而不是 users 数组内的 2 个数组来创建一些假数据 那么效果很好 我做错了什么 正确的方法是什么 class UserTableSeeder ex
  • 是否可以跨 2 个不同的 iOS 应用程序访问数据?

    假设我在 App1 中存储了一些 ID 数据 并希望在同一设备上的 App2 中访问它 平台上可以这样吗 如果没有的话有什么解决方法吗 您可以使用iOS 钥匙扣 http developer apple com library ios do
  • 将图像存储在核心数据中

    我想在更新记录时存储每位员工的图像 我怎样才能做到这一点 我有一个字典 存储员工的姓名 ID 和部门 现在我想将图像保存在一起 Core Data 支持 二进制数据 类型 当您定义具有二进制数据字段的模型时 它会创建具有 NSData 字段

随机推荐

  • 按周分组并选择本周的记录

    我一直在尝试使用 MySQL 显示每周销售结果表 其中一周的结果应如下所示 Sun Mon Tues Wed Thur Fri Sat 所以我继续使用这个查询 SELECT DATE FORMAT cart calendar datefie
  • 如何使用 Java 连接到 Active Directory

    我使用的是Weblogic Ejb3 0 爪哇1 6 我需要通过 Java 代码访问 Active Directory 我读到了几种方法 Kerberos LDAP 有人可以建议我以舒适的方式这样做吗 我在哪里可以有一些完整的代码示例 谢谢
  • 检查 jolt 中是否为 null 或为空,并输入输入 JSON 中存在的另一个值

    这是我的输入 JSON AddressBilling FirstName Some Name LastName Some Name Address some address AddressShipping FirstName LastNam
  • 纯函数式语言中的高效堆

    作为 Haskell 的练习 我正在尝试实现堆排序 在命令式语言中 堆通常被实现为数组 但这在纯函数式语言中效率非常低 因此 我研究了二进制堆 但到目前为止我发现的所有内容都是从命令式的角度描述它们的 并且所提出的算法很难转化为函数设置 如
  • 访问扩展的background.js的控制台和开发工具

    我刚刚开始使用 Google Chrome 扩展 但似乎无法从后台 js 登录到控制台 当发生错误时 例如 由于语法错误 我也找不到任何错误消息 我的清单文件 name My First Extension version 1 0 mani
  • GWT 中的本机 Javascript 方法

    我的 GWT Java 类之一中有一个本机 Javascript 方法 但我在从本机 Javascript 代码调用我的 Java 方法时遇到问题 我试着跟随this http code google com webtoolkit doc
  • 设置多个 geom_sf 图例的格式

    我正在 ggplot 中处理多个 sf 几何图形 并希望以点 线和正方形 对于多边形 的形式显示图例 然而 geom sf 图例结合了我的几何特征 即结合线和点 如下所示 library ggplot2 library sf poly1 l
  • 如何在 PySpark 中过滤 MapType 中的键?

    给定一个如下的 DataFrame 是否可以过滤掉 Column 的一些键收藏PySpark 中的 MapType StringType StringType True 同时保持架构完整 root id string nullable tr
  • Common Lisp 中的属性列表是否引用某些全局状态?

    下面的代码有z作为局部变量 但它的行为就像全局变量一样 defun foo m let z stuff nil push m getf z stuff print z foo 1 foo 2 foo 3 我希望输出是 STUFF 1 STU
  • GLFW 的线程设置

    我开始使用新的 Lwjgl 3 它使用 GLFW 进行显示 鼠标 键盘处理 我真的很喜欢它 然而今天我碰上了砖头 我有一个简单的渲染动画 但是当我拖动屏幕时 它停止渲染 直到我再次放开 According to http www glfw
  • MySQL 视图中的 BLOB 而不是正确的数据

    我使用创建了一个 MySQL 视图UNION ALL从两个表中 这样我就可以为这些表中的相同数据获得相同的列名 即tbl1 author2 AS translator tbl2 translator AS translator 等等 问题是
  • JavaScript 中的字谜查找器

    我应该用 JavaScript 编写一个程序来查找所提供的一系列单词中的所有字谜 例如 monk konm nkom bbc cbb dell ledl llde 输出应分为几行 1 monk konm nkom 2 bbc cbb 3 d
  • java读取远程文件需要用户名和密码

    我正在尝试用java读取远程文件 File f new File 192 168 1 120 home hustler file txt 远程计算机需要用户名和密码才能访问该文件 有没有办法可以通过java代码传递参数并读取文件 packa
  • 启用/禁用时的 JTextField 背景颜色

    当它被禁用时 我将 JTextField 的背景颜色更改为黑色 我这样做是使用UIManager以及我在应用程序启动时设置的这个属性 TextField disabledBackground 我想知道再次启用 JTextField 时如何更
  • 使用带有括号的 my 并且只有一个变量

    我有时会看到这样的 Perl 代码 my variable blah 在单个变量两边加上括号有什么意义 我认为括号仅在声明多个变量时使用 例如 my var1 var2 var3 blah 出现差异时有以下几种情况 When array在右
  • Javadoc 失败,找不到 java.lang.FunctionalInterface 的类文件

    我正在尝试使用 Android Studio 生成 Javadoc 在 Eclipse 下工作正常 但在 Android Studio 下出现错误 javadoc 错误 com sun tools doclets internal tool
  • 计算三级缓存的实际/有效CPI

    a 给定一个具有两级高速缓存 L1 和 L2 的内存系统 以下是规格 L1缓存命中时间 2个时钟周期 一级缓存命中率 92 L2 缓存的未命中惩罚 L2 的命中时间 8 个时钟周期 二级缓存命中率 86 主存丢失惩罚 37 个时钟周期 暂时
  • 带有加载指示器的 UISearchController

    我实施了UISearchController我正在从 js 回调获取数据 但是当我录入searchbar放入数据需要一些时间 所以我想知道如何实现加载indicator进入表查看结果UISearchController 用 Swift 3
  • javascript jquery 单选按钮单击

    我有 2 个单选按钮和 jquery 正在运行
  • 核心数据:-deleteObject:崩溃,删除规则是原因吗?

    我有以下模型 如图所示 替代文本http img521 imageshack us img521 9741 schermata20100224a12251 png http img521 imageshack us img521 9741