问题标签 [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 投票
3 回答
3708 浏览

iphone - 将 NSManagedObject 的实例添加到 NSManagedObjectContext ok,更新同一个实例失败

我在我的 iPhone 应用程序中使用核心数据。我创建了一个简单的类Friend,它派生自NSManagedObject并使用以下属性:

我能够在我的上下文中添加和删除此类的实例,并且我的更改也是持久的。
现在我想更新/修改一个Friend实例并使其再次持久化。

但这似乎行不通。

这是一段代码,它显示了我的问题:

在评论 1 一切都很好。我得到了 Friend 类型的新NSManagedObject ,可以更改 name 属性。上下文告诉我有一些东西可以保存。保存上下文后,我看到context.hasChanges == 0。另请注意,数据在保存上下文后是持久的。

在评论 2 之后,我更改了 name 属性。现在我希望context.hasChanges == 1并且在上下文保存之后我希望新名称是持久的。但不幸的是它不是。再次启动应用程序,使用 name-property = @"name1"加载Friend实例。

我在核心数据文档中找不到任何提示或示例。那么我做错了什么?我必须做些什么来更新/修改现有的Friend实例并使其持久化?

我看到的唯一解决方案是删除条目,更改它,然后再次添加。但我认为这不是正确的方法。

谢谢!

0 投票
2 回答
475 浏览

iphone - CoreData 的保存方法不起作用

我正在使用 coredata 为我的 iPhone 创建一个应用程序。

我有一个带有对象的视图控制器,我想将该对象保存到我的收藏夹视图控制器中。通过单击收藏夹按钮,我希望将对象保存到 managedObjectContext 中,但出现以下错误:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“尝试执行另一个操作,但已在进行提取”。*

我的代码:

我不确定我做错了什么。

0 投票
2 回答
544 浏览

objective-c - 核心数据:删除未保存的对象时出错

我在核心数据项目上遇到了一些麻烦。我有一个带有 NSManagedObjects 的 NSArrayController 和 + / - 按钮。如果我在保存文件后删除行中的一个对象,它可以正常工作,但是如果我添加一个新对象,然后立即再次删除它(不更改任何默认值),我会收到一个错误:

如果我撤消新对象的添加,情况也是如此。

任何人都可以给我一个指针怎么办?我认为这与它只有一个临时 ID 有关,但我不知道如何解决它。

0 投票
2 回答
351 浏览

iphone - 避免多个 NSManagedObjectContexts 之间的无限递归同步

设置:

我有两个托管上下文设置(在 iPhone 应用程序上)。我用于大多数查询的主要上下文和用于希望在后台发生的长时间运行的操作的后台上下文。

我已经针对每个托管对象上下文设置了 NSManagedObjectContextDidSaveNotification 通知。为了响应通知,我调用 mergeChangesFromContextDidSaveNotification 进行同步。每当主上下文发生变化时,我还需要在后台上下文上运行一些作业,因为现在事情的状态已经发生变化。

只要只在其中一种上下文中写入,这工作正常。在这种情况下,写在主要上下文上。但是,如果我在后台上下文中写入,则会导致无限循环。在后台上下文中保存会触发对主上下文的通知,主上下文依次合并更改并触发自己的通知,由后台上下文获取。这会触发后台上下文执行其后台作业,这些作业(如果他们写任何东西)再次开始循环。

似乎这是错误的设置,或者我需要一种方法将“在主上下文发生更改时开始处理后台作业”与更改通知分离,或者我需要将后台上下文设置为只读。

想法?与典型的“第二个上下文导入”场景不同,我相信我需要/希望我的背景上下文相对于主要上下文保持最新,以便我从我的背景中获得正确的结果工作。

0 投票
1 回答
1006 浏览

iphone - How do I trigger a reload in an NSFetchedResultsController without changing the fetched object?

In my iPhone app, I have an NSFetchedResultsController showing User objects in a UITableView. The User Objects have 0-many Log objects. A summary of the Log objects are shown together with their User object in the UITableView.

My app uses a tab bar, so user input in the logging tab require that the user tab's NSFetchedResultsController is triggered to reload.

So far I do it by writing to the User object:

This works fine, but seems a bit like a hack.

Is there a better way to do this? Like specifying that changes in the Log object should propagate to the User object too?

0 投票
1 回答
229 浏览

core-data - 多层MOC合并……CoreData老手,你怎么看?

原来的问题已经回答了。更新解决了评论中提出的相关问题。

原帖:

我正在使用 Apple 的CoreDataBooks中使用的 MOC 保存方法。但是,我似乎使用了两层 MOC 合并(三个 MOC,其中第三层与第二层合并,然后第二层与第一层合并)。

首先,我有一个列出学校课程的表格视图(ClassList)。选择一个类会推送一个 2 行表视图 (AddClass)。在 AddClass 中,第一行允许用户编辑类标题。选择第二行会推送一个 tableview (ClassRoster),它显示该班级的学生名单。最后,选择一个学生会推送另一个 2 行表格视图 (AddStudent),用户可以在其中编辑学生姓名和用户名。

我可以通过使用双重 MOC 合并方法(CoreDataBooks 使用的 managedObjectContext 和addingManagedObjectContext)成功地添加和保存类。我将在我的第一个视图中将“基本 MOC”称为“MOC1”并将“暂存器”MOC 称为“MOC2”。

MOC2 临时存储对类对象所做的更改。然后可以保存或取消这些更改,将 a 发送-didFinishWithSave:(BOOL)给委托人。如果我保存,在 MOC2 中所做的更改将与 MOC1 合并。该合并运行良好。

处理对学生对象所做的更改是我出错的地方。我想我可以使用 MOC3 作为暂存器来更改将与 MOC2 合并的学生对象(当我保存一个学生对象时)。当我保存类对象时,MOC2 可以反过来与 MOC1 一起保存。

但是我在保存 MOC3 并将学生对象添加到类对象时遇到了错误,因为它们位于不同的上下文中。我可以发布代码,但首先我想问一个更大的问题:我是不是走错了路?

更新:

Zarra 先生建议使用initWithEntity:insertIntoManagedObjectContext:MOC 并将其设置为 nil,从而创建一个临时对象,稍后可以设置并保存其 MOC。

按照他的建议,我正在尝试合并以下代码:

我遇到了一个错误,但我不确定它是否与此代码有关。我将调试并发布我发现的内容。

0 投票
1 回答
253 浏览

iphone - iPhone托管对象删除崩溃

我尝试通过调用 for 循环来删除一些托管对象

在循环中,我打电话

在上述行中,应用程序崩溃并且从那里无处可去。有任何想法吗?

谢谢

0 投票
2 回答
976 浏览

core-data - COMPILED Core Data Managed Object Model:从它及其对应的数据库中获取最大的信息

我是 Objective-C 的新手;而且我在我的书籍或互联网上找不到任何解决方案。

我的问题:在没有源代码的情况下使用已编译的 .mom 和 SQLite db 的最有效和最快的方法是什么?

详细信息: 我正在尝试将我的小应用程序连接到另一个应用程序的数据库并使用(只读)其部分数据。但这项任务很困难,因为该应用程序没有 SDK。

该应用程序有一个已编译的 .mom 文件和一个 SQLite 数据库。

我成功地以编程方式(不使用 IB)使用 .mom 连接到数据库,并且可以设法获取实体,将数据填充到我重新创建的对象中等。但我每一步都在猜测、试验和错误。因此,开发需要大量时间并且容易出错。剖析最困难的任务是通过中间表建立对多关系。

例如:实体“书籍”与“作者”有关系。由于作者的顺序很重要,因此有一个中间表“authorsNumbered”,其中包含以下字段:数字、作者、书籍;并且“数字”字段确定作者的确切顺序,因为它们应该出现在任何地方(重要!)

我终于设法使用 NSSortDescriptor 创建了一个有序的作者数组,但我花了整整一周的时间才找到并猜测如何去做!

您会建议更有效的方法来处理已编译的 .mom 而不是我使用的方法吗?

谢谢

0 投票
3 回答
2893 浏览

iphone - 不同上下文中对象之间的非法关系:但我只有一个上下文?

我收到以下错误:

'NSInvalidArgumentException',原因:'非法尝试在不同上下文中的对象之间建立关系'条件'

运行我的 iphone 应用程序时。我的模型的相关部分如下所示:

为了方便起见,我将提到模型的这一部分旨在让树艺师记录树冠的状况。它存储用于评估树冠的选项列表,用户也可以编辑这些选项(因此 TreeCrownConditions 包含选项,TreeCrown.condition 指向评估中所做的特定选择)。

我有一个 UIPickerView 加载这些选项并将所选选项与 AssessmentTree 相关联,使用 didSelectRow:inComponent 中的以下代码:

当我运行它时,前几次我选择一个选项一切都很好,但有时(通常在添加/编辑/删除 TreeCrownCondition 选项之后)应用程序会在上面的行中崩溃,并出现我在开头发布的错误。

这个错误似乎很容易修复,除了我在整个应用程序中只使用一个 NSManagedObjectContext 。每个新控制器在加载以下代码时都会抓取它:

我找不到太多关于这个错误或如何解决它的信息,而且我当然没有找到任何人在不使用多个上下文的情况下遇到这个问题。

我只能假设我确实有多个上下文,但我看不出这是怎么可能的。我错过了什么?

编辑继承堆栈跟踪:

0 投票
2 回答
8313 浏览

core-data - 使用“NSInvalidArgumentException”保存 managedObjectContext 时崩溃,但只是偶尔

我不断从 managedObjectContext 上的 save: 命令中得到崩溃。它甚至不满足 NSLog 语句,所以我看不到未解决的错误语句,所以我无法弄清楚问题可能是什么。它不会每次都发生,而只是偶尔发生。

这是代码(基本上是想增加一个计数器):

在控制台窗口中,我收到如下消息:

或这个:

甚至这个:

然后它在第一次抛出时显示调用堆栈,然后是通知(在抛出“NSException”实例后终止调用,“[切换到进程 23501]”和“程序收到信号:“SIGABRT”。

我认为这个问题与 CoreData 有关,但我不确定。我已经清理了我的构建和目标,但似乎没有帮助。我试过锁定/解锁 ManagedObjectContext 并没有帮助。

任何关于从哪里开始寻找解决方案的想法将不胜感激!