问题标签 [nsmanagedobjectcontext]

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 回答
836 浏览

iphone - 其他视图中的 managedObjectContext

我终于设法让核心数据正常工作并开始理解它。到目前为止,我刚刚在一个启用了核心数据的基于窗口的应用程序中播放,在应用程序委托文件中播放。

但是如何从应用程序委托外部访问我的 managedObjectContext,例如,如果我有一个 UIView 子类?

0 投票
3 回答
538 浏览

iphone - 核心数据:非法尝试建立关系+(空)上下文

我正在后台线程上解析数据,插入新实体并与其他现有实体建立关系。

有时我会收到错误消息:“尝试在不同上下文中建立对象之间的关系”。

在阅读了有关此内容的更多信息后,我现在正在后台线程中创建一个新的 ManagedObjectContect 并使用它来插入新实体并设置关系。我小心翼翼地只在我的后台线程中使用这个新的 ManagedObjectContext。当我需要找到一个现有实体来建立现有对象和这些新对象之一之间的关系时,我调用 [moc objectWithId:id] 以使用我的新 moc 获取现有对象。但是,我仍然收到错误消息。

沮丧,我开始打印东西。我注意到,当我为每个 NSManagedObject 打印出 managedObjectContext 属性时,就在建立关系之前,我有时会打印出“(null)”。这似乎是问题发生的时候。

谁能告诉我我做错了什么?为什么有时我的对象上有 (null) mocs?

谢谢你提供的所有帮助!

0 投票
1 回答
532 浏览

cocoa - NSManagedObject 子类问题

大家好,我有一个 NSManagedObject 的子类。在 awakeFromInsert 和 awakeFromFetch 中,我调用了一个初始化方法,其中包括启动一个 NSTimer。

现在我需要一个地方来使计时器无效。但是,不会调用 dealloc、finalize、didTurnIntoFault、prepareForDeletion 和 willTurnIntoFault。

根据文档,当对象从内存中清除时,这些方法都应该被调用。它们都不是,但是所有数据都保存在持久存储中。我对为什么或如何感到困惑。

有什么我可以做的事情可能导致这些方法在对象生命周期中不被调用吗?

0 投票
1 回答
5136 浏览

iphone - 在 NSManagedObjectContext 中调试 SIGABRT -save:

从 NSManagedObjectContext -save 内部:我收到此消息:

断言失败:(_Unwind_SjLj_Resume() 无法返回),函数 _Unwind_SjLj_Resume,文件 /SourceCache/libunwind/libunwind-24.1/src/Unwind-sjlj.c,第 326 行。

节目接收信号:“SIGABRT”。

警告:无法读取 /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.2.1 (8C148)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib 的符号(找不到文件)。

当我删除一个带有运行的多对多的实验对象时,会发生这种情况,该对象具有多对多的样本,而样本具有多对一的数据。Experiment 也有 to-many,Page 有 to-many,Display 有 to-many to Run。我提到这一点是为了指出图表的周期性。这是模型的简化图:

替代文字

实验是用户与之交互的顶级实体。一个 Experiment 包含多个 Run 对象。运行是从特定时间开始并在稍后时间结束的数据集合。由于可以同时从多个来源收集数据,因此每次运行的每个来源都有一个样本。实验包含数据,需要查看这些数据并与之交互。因此,每个实验都有一定数量的页面对象,每个页面包含一定数量的显示(例如,图形、仪表)。显示器被配置为显示属于实验的某些运行子集。因此,虽然一个实验可能包含几十个运行,但它的一个页面一次只会显示其中几个运行。Display 实体维护这个列表。显示器不是一个看法。视图将引用 Display 对象并在 Display 对象的更改时收到通知。

我一直在使用删除规则,但现在已切换到“无操作”删除规则以及所有这些类的 -prepareForDeletion 方法。这种变化没有任何区别。在这两种情况下,错误消息是相同的。

有趣的是,当我重新启动应用程序时,所有标记为删除的对象都已删除。

此外,如果 Experiment 没有 Run 对象,则删除工作不会发生。就此而言,从实验中删除单个运行也可以。

我希望有人看到过这样的事情,并可以就导致这种情况的原因提供建议。或者,如果有人对如何为 iOS 4.2.1 获取 libXcodeDebuggerSupport.dylib 有建议,那也可能会有所帮助。

更新:我遵循了此处的建议,并且能够让 Xcode 找到适用于 iOS 4.2.1 的 libXcodeDebuggerSupport.dylib。但这对诊断问题完全没有帮助——问题仍然存在。

更新 2:阅读了一下并下载了 unwind-sjlj.c 版本后,似乎我正在处理类似未捕获异常的事情。我不确定这对我有什么帮助...

更新 3:感谢 Kamchatka,我做了几天前可能应该做的事情:打开“停止 Objective-C 异常”。这让我看到对已删除对象的引用仍在保留 - 更糟糕的是,键值对观察已删除对象。修复了这个已解决的问题,我能够恢复使用删除规则而不是 -prepareForDeletion 方法。

0 投票
2 回答
591 浏览

iphone - Core Data 在看似正常的 NSString 字段上崩溃

我有另一个我无法弄清楚的奇怪错误。

我尝试使用以下代码创建一个 tableviewcell:

问题是我可以用任何值填充标签,除了描述值。一旦我这样做,我就会遇到以下崩溃:

2010-12-22 16:07:13.165 iDoms [24086:207] CoreData:注释:从数据库中完成的故障:0x8b16dd0 程序接收信号:“EXC_BAD_ACCESS”。警告:无法恢复先前选择的帧。数据格式化程序暂时不可用,将在“继续”后重试。(此时调用 dlopen 并不安全。)

堆栈上有 62820 个订单项。我不知道从哪里开始解决这个问题。我已经习惯了 Java,而到目前为止,Objective-C 一直是一个关于奇怪的小错误的噩梦。

Article 类如下所示:

数据库包含数据,特定字段只是字符串“Test1”。一如既往地感谢任何帮助!

0 投票
1 回答
477 浏览

iphone - 如何在两个不同的核心数据模型之间共享一个实体

我想知道如何在两个不同的核心数据模型之间共享一个实体?

例如,我有一个“ Universe ”模型,它描述了一个“ WorldData ”及其“ CountryData ”。另一方面,我有一个“人口”模型,它用它的“ CountryData ”描述了一个“ HumanData ”。

我绝对想让我的模型分开。

提前致谢。

0 投票
1 回答
4643 浏览

objective-c - 如何将 ManagedObjectContext 与线程一起使用

这可能是一个非常直接的应用程序,但我是 Objective-C(来自 Java)的新手,整个内存管理和“EXC_BAD_ACCESS”错误让我心碎。

我有一个带有核心数据的普通 NavigationController iPhone 应用程序。在 AppDelegate 中创建 NSManagedObjectContext 并将其传递给 RootViewController。直接从主线程中查找视图以填充表格,这似乎工作正常。

该应用程序是某种 RSS 类型的阅读器,因此一旦应用程序启动,我就会触发一个线程来获取新数据并更新视图:

问题是这行不通。在 DataManager 中,首先需要检索设置,一旦创建了 NSEntityDescription,我就会得到“EXC_BAD_ACCESS”:

我猜指向 ManagedObjectContext 的指针是错误的,因为在不同的线程和内存池中运行。那么如果这是问题,你如何创建这样的应用程序),我如何获得对他线程的原始 ManagedObjectContext 格式的引用?

[编辑] 我也尝试使用

在 doUpdateData 中(正如其他帖子所暗示的那样),但这给出了相同的结果

0 投票
2 回答
1030 浏览

cocoa - 来自临时 URI 的永久 NSManagedObject URI?

我有一个 NSManagedObject 子类,它存储子对象的 URI。它最初在第一次创建子对象时存储临时 URI,并实现在保存之前-willSave调用-obtainPermanentIDsForObjects其 NSManagedObjectContext,以便只保留永久 ID。

不过,我遇到的问题是其他实例也存储临时 URI。当一个-willSave对象在具有相同子对象的另一个对象之后不久收到消息时,它也会调用-obtainPermanentIDsForObjects并获得一个不同的、错误的永久 URI,从而导致后续的 Core Data 错误错误,例如:

CoreData could not fulfill a fault for '0x102e4c110 <x-coredata://E17EE19B-E7F3-4102-ACFF-3E6F8BE8B104/MyEntityName/p2>'

我想要一种从 NSManagedObject 的旧的、临时的 URIRepresentation 到已经生成的新的、永久的 URIRepresentation 的方法。

我最初的想法是存储我自己的字典<temporary URI,permanent URI>并在使用之前进行查找-obtainPermanentIDsForObjects- 是否有一种更简单(更简单或内置)的方式我错过了?我在文档中发现的没有任何建议。

0 投票
1 回答
1487 浏览

iphone - iPhone - 核心数据崩溃 - 多个托管对象上下文

所以,我正在使用多线程的核心数据。每个人都有自己的托管对象上下文。我得到一个无法识别的选择器异常,所以我很好奇我是否做错了什么。崩溃显然与“mergeChanges”方法有关。我将不胜感激任何帮助。

编辑 问题似乎是 myManagedObjectContext 返回一个已释放的对象。怎么可能?

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSKeyPathExpression _processReferenceQueue:]:无法识别的选择器发送到实例 0xa65940”

0 投票
2 回答
160 浏览

core-data - NSFetchRequest 数据成视图?

我刚刚开始使用 CoreData API,并且正在学习一些教程。我了解了存储和检索对象的基础知识,但是在连接所有 MVC 方面遇到了麻烦。

我有一个 CustomView,我用 CoreAnimation 在其中绘制了一些东西,包括一些将从 NSManagedObject 获取字符串的文本层。我从一个基本的 CoreData 应用程序模板开始,因此在 appDelegate 中声明了 managedObjectContext 等,我只是不确定如何将数据从 CoreData 堆栈获取到视图中。顺便说一句,这一切都在代码中,而不是界面构建器。

所以我的问题是,如果我想以纯 MVC 方式构建我的应用程序,我应该如何将数据从堆栈中获取到视图中?例如,我应该如何让我的视图访问初始化的 NSManagedObjectContext?

我一直在阅读 Cocoa 设计模式,但在谈到 MVC 时我有点傻。我知道这是一个非常笼统的问题,但如果有人可以说,“设置代表,抓住一个指针......”不管它是什么,那就太好了!

提前致谢!