问题标签 [managedobjectcontext]

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

ios - 合并多个子托管对象上下文

在我的 iOS 应用程序中,我正在尝试将核心数据与 Web 后端同步。我想为同步使用一个单独的后台托管对象上下文,这样我就可以在同步处理时让我的主上下文自由地接受来自 ui 的更改。根据这篇博文http://www.cocoanetics.com/2012/07/multi-context-coredata/,这两个上下文都是我的写入磁盘上下文的子级。

我的问题是,如何在保存到磁盘之前合并两个子上下文?

如果我订阅 contextDidSaveNotifications,我可以使用合并上下文

但根据文档......“此方法刷新已在其他上下文中更新的任何对象,任何新插入的对象中的错误,并在已删除的对象上调用 deleteObject::。”

我不想刷新更新的对象并丢失对 mainContext 所做的更改,而是合并两个更改集。

我是多上下文核心数据的新手,所以我可能会以错误的方式思考这个问题。

有任何想法吗?

0 投票
1 回答
437 浏览

core-data - 为什么应用程序会尝试保存到 PLSharedManagedObjectContext?

以下是我从崩溃报告服务 HockeyApp 收到的崩溃报告。失败的原因是在 PLSharedManagedObjectContext 中保存失败。我(认为)我正在主应用程序委托 managedObjectContext 中进行所有保存。为什么要保存到 PLSharedManagedObjectContext ?

我认为这是相关的代码:

这是我收到的崩溃日志:

编辑:我认为 ImageEditor 中的这段代码可能与它有关:

0 投票
3 回答
70 浏览

ios - 尝试保存核心数据记录后出现错误

我有一个视图控制器来添加核心数据记录。核心数据实体名称为FavoriteThings,属性为thingname。我有一个名为 SaveButtonAction 的保存按钮操作。当我点击按钮内部时,应该存储插入到名为 ToDoTextField 的文本字段中的文本,但应用程序崩溃并显示以下日志错误:

这是该方法的代码

感谢您的时间..

0 投票
2 回答
1397 浏览

ios - 将 managedObjectContext 发送到 viewController 崩溃

我正在尝试通过 segue 将我的 managedObjectContext 从我的 masterViewController 发送到 anotherController 并且我总是收到此错误:

我从viewDidLoad()masterViewController 中的 appDelegate 获取 managedObjectContext ,如下所示:

我再也想不出我做错了什么,请帮忙。

0 投票
1 回答
895 浏览

click - NSCollectionView, How to send representedObject to code on Double Click?

I am using bindings for the first time on a core data store with a one to many relationship on my entities, I display the subItems using an NSCollectionView which shows an image and a title.

Objects are:

Controls are:

I have bound the NSImageView to Collection View Item with model key path as representedObject.imagePath and a value transformer. This all works well.

What I want to do though is detect a double click on the item in code and gain access to the representedObject of the double clicked item.

I tried to subclass NSImageView and override the mouse event for a click event which worked but then I couldn't get access from here to the ManagedObject Context and selected object. I am not sure how to do this the correct way.

Thanks for any help, I understand this is basic stuff and I must be doing something incorrect with the bindings implementation.

0 投票
2 回答
909 浏览

sqlite - 将一个 ManagedObjectContext 和 PersistentStoreCoordinator 与两个 Store 一起使用时如何保存数据

问题陈述

当尝试将记录保存到作为分配给同一 PersistentStoreCoordinator 的两个 SQLite 存储之一的读/写存储时,我的 iPhone 应用程序崩溃。保存记录时一个明显的问题是 PersistentStoreCoordinator 不知道将数据保存在哪个 Store 中(只是因为我不知道如何实现这一点)。

首先,我将提供总体情况以确保我的方法是合理的。然后我将提供实现细节。

背景

这是一个简化的示例,代表了我正在开发的实际应用程序的关键方面。

托管对象模型

种子数据

种子数据

用户输入场景

用户输入场景

当前实施

核心数据实现

核心数据实现

数据存储和检索

数据存储和检索

当然,在查看选择列表以对属性进行选择时,不应向用户提供任何证据表明选择来自两个不同的商店。

持久存储协调器设置

重要目标

请记住以下几点:

  1. 如果可能的话,我更愿意进行种子数据更新,而不必在幕后管理数据版本(即仅提供应用程序更新,只提供新的或更改的种子数据记录并以某种方式处理删除)或实现版本检查功能处理用户从版本 n 升级到 n+5 的情况的代码。
  2. 用户数据和种子数据不应包含两者之间的任何重复记录并使用相同的 ManagedObjectModel。所以从数据和模型的角度来看,应该没有必要合并两个商店或将一个商店迁移到另一个商店。

研究

在这种情况下, 将对象从多个存储保存到单个持久存储,这两个存储被合并,然后获取所有记录,剔除重复项并保存上下文。我希望不必合并然后检查数以千计的重复记录。(参见上面的重要目标#2。)

在这种情况下, 合并两个 iOS 核心数据持久存储的有效方法是什么?,某些实体是只读的,而其他实体是读/写的。在我的应用程序中,种子数据存储中的所有实体都是只读的,用户数据存储中的相同实体是读/写的。所以我认为迁移不适用。(参见上面的重要目标#2。)

在 Apple 的“Persistent Store Coordinator”下的Core Data Programming Guide中,图 4“高级持久性堆栈”显示了使用两个 Store 的 Core Data 实现,但同样,每个 Store 都配置有单独且不同的对象。在我的应用程序中,每个对象都出现在每个商店中。

此处提出的解决方案 Combining Two SQLite Stores Into One,相对于在不同存储中的对象之间没有关系的两个存储似乎是相关的,但没有提供与我实现的内容进行比较的细节。

我已经阅读了Marcus Zarra 撰写的 Core Data (2nd Edition) 的前三章,但他没有使用两个不需要迁移的商店。然而,第 3 章确实提供了一个非常清晰的版本控制示例。(它的复杂性使我达到了上面的重要目标#1。)

这个解决方案,默认情况下在 iPhone 的核心数据中使用哪个持久存储,建议使用 ManagedObjectModel 的多个配置,但每个实体都分配给一个且只有一个配置。我不确定这个解决方案如何,甚至是否可以推断到我的情况。

也许这里提出的解决方案是NSPersistentStoreCoordinator 具有两种类型的持久存储?,接近我需要的。不幸的是,只处理请求。我在 NSManagedObjectContext 类中没有看到类似于 NSFetchRequest 方法的方法 setAffectedStores 用于保存。

0 投票
2 回答
284 浏览

core-data - 基于现有托管对象属性创建新对象的关系

我有以下数据模型:

注意 entityD 和 entityE 与 AC 没有关系。

我的 DetailViewController 从托管对象中获取属性并作为新托管对象保存到 managedObjectContext。

我目前在 UILabels 中显示现有的托管对象,如下所示:

然后,我在此处的保存操作中保存到上下文:

这适用于设置 nameD 和 nameE。我正在尝试在新创建的 EntityD 和 EntityE 对象之间创建关系。假设从 entityE 到 entityD 的关系是 toD。我已经尝试过保存操作:

但我收到错误:'NSInvalidArgumentException',原因:'-[__NSCFString managedObjectContext]:无法识别的选择器发送到实例 0x10939fd00'

我将如何建立新创建的对象之间的关系?

0 投票
2 回答
340 浏览

swift - BAD_EXC_ACCESS 检查数据是否存在:SWIFT

我有一个UITableViewController我有数据。如果您点击该行,您可以编辑现有数据,如果您点击 中的 + UIBarButtonItem,您可以添加新信息。当我的 Segue 传递核心数据对象(vc.managedObjectID) 时,我的“详细”视图控制器会检查 firstName 字段是否有数据。

Objective-C中,我会做这样的事情

我在检查 firstName 中是否有任何数据时遇到问题: var firstName = playerInformation.firstName 仅在添加新对象时导致 EXC_BAD_ACCESS(意味着 playerInformatin 为空),当我点击查看现有数据时,它返回正确数据。如何在 Swift 中检查 playerInfomation 是否为空(新记录)或有数据(现有数据)?

prepareForSegue

0 投票
1 回答
30 浏览

ios - IOS/Xcode/CoreData:在模态控制器中如何引用呈现控制器

我有一个模态控制器controller2,它编辑一个由controller1 模态创建的视图。modal controller2 在 storyboard 中配置,但在 viewdidload 中的以下代码中从 controller1 启动,如下所示。

当我在保存更改后关闭控制器 2 时,我希望将 managedobjectcontext 中的更改转移到控制器 1。

SO上的一些示例建议使用以下内容:

它将在关闭它之前进入controller2。

但是,尝试执行此操作会出现错误“No Known Class Method”,提示我必须实例化控制器 1。但是,我不想创建 controller1 的新实例并将托管对象上下文传递给它。我想将 managedobjectcontext 传递给已经在导航堆栈中的 controller1 的实例。

将不胜感激任何建议如何使这项工作。

谢谢你。

0 投票
1 回答
3670 浏览

ios - 核心数据:我应该从父上下文中获取对象还是子上下文与父上下文具有相同的对象?

我对ManagedObjectContext.

当我设置子上下文并设置父上下文时,子上下文是否包含父上下文的所有对象?我正在使用在Core Data中创建的 stock 方法AppDelegate,但我将其更改ConcurrencyQueue为 main.

在我应该更新数据库的方法中:

  • 创建子上下文,设置父上下文
  • 对子上下文执行阻塞
  • 从父上下文中获取
  • 在子上下文中创建或更新对象
  • 在子上下文中调用 save
  • 让通知侦听器处理子上下文保存
  • 保存父上下文

我的问题是看起来我没有将任何内容保存到子上下文中。我没有收到更新或创建 ChatMessage 的 println 消息。我在这里做错了什么?

AppDelegate 核心数据方法

处理更新的数据库类