问题标签 [core-data]

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

core-data - 核心数据:在谓词中查询 objectID?

我正在使用获取请求和谓词从核心数据持久存储中获取一组对象。我当前的谓词只是检查一个属性是否 >= 某个值。这一切都很好,除了我想最终排除当前保存在数组中的任何对象。

我基本上需要能够排除一组对象,我认为我能做到这一点的唯一方法是能够objectID从我的托管对象数组中获取一个列表,并在我的谓词中创建另一个表达式以确保任何对象返回的不一样objectID。即@"ANY records.objectID NOT IN %@", arrayOfObjectID

我怎样才能做到这一点?

0 投票
2 回答
886 浏览

cocoa - 根据 NSTextFieldCell 的编辑值更新绑定字典

我正在将一些古老的代码(10.2 时代)从基于 NSCoding/plist 的归档移植到使用 Core Data。我有一个带有自定义 NSTextFieldCell 的 NSOutlineView。大纲视图绑定到 NSTreeController 以提供数据。

绑定模型如下所示:

NSTreeController: 托管对象上下文 -> Controller.managedObjectContext

NSOutlineView 的 NSTableColumn 值 -> Tree Controller:arrangedObjects:itemDictionary

NSOutlineView 有一个自定义的 NSTextFieldCell 子类,它在文本字段旁边添加一个图像,所以我将 NSManagedObject 的值作为一个名为 itemDictionary 的 NSMutableDictionary 传递给它,这样我就可以拉取并设置标题和 isChecked 键值。

我遇到的问题是更新文本字段的值并将更改后的值传递回我的托管对象实例。用户双击标题值并对其进行编辑后,它被传递给-(id)objectValue,但我不确定下一步是将更新传播到我的 NSManagedObject 实例。到目前为止,我在 NSTextFieldCell 子类中读取和设置值的代码如下:

0 投票
1 回答
399 浏览

objective-c - 使用核心数据,当一对多关系低于最小计数时,自动删除实体的方法是什么?

我有一个核心数据模型,其中包括一个具有一对多关系的实体。我已将关系设置为非可选并将“最小计数”设置为一。但是,一旦违反了这条规则,我就无法制定出一种行动方式。理想情况下,我只想删除实体......但我无法找到自动执行此操作的方法,或者找出可能会通知我此事件的位置。

0 投票
2 回答
148 浏览

objective-c - 您如何使复选框单元格中的文本能够被编辑?

您如何使复选框单元格中的文本能够像在文本单元格中一样进行编辑,而不仅仅是选中复选框?问题是核心数据模型中的复选框是布尔值,而文本是字符串,所以我不知道如何使这项工作。

0 投票
1 回答
1909 浏览

core-data - CoreData 设计模式:我应该拥有多个 - 或 - 多少 NSPessistentObjectContexts 的单个对象?

我正在将应用程序从 SQLitePersistentObjects 转换为 CoreData。

在应用程序中,有一个类,我从从我的服务器检索的 XML 文件生成许多*实例。UI 可以触发需要我保存其中一些对象的操作,直到下一次调用应用程序。

除了为这些对象中的每一个拥有一个 NSManagedObjectContext 之外(仅与其可以包含 blob 的从属对象共享)。我看不到如何对哪些对象进行持久化进行细粒度控制(即在对象级别)。如果我尝试为所有新创建的对象设置一个上下文,当我尝试将我的一个对象移动到新上下文时会出现异常,以便我可以自己持久保存它。我猜这是因为它拥有的对象留在“旧”上下文中。

我看到的另一个选项是拥有一个上下文,持久化我的所有对象,然后删除我以后不需要的那些——这感觉它会过多地访问数据库,但也许 CoreData 确实有魔力。

所以:

  1. 我是否遗漏了一些关于我的 CoreData 应用程序的架构方式的基本知识?
  2. 每个对象都有一个上下文是一个好的设计模式吗?
  3. 有没有更好的方法在上下文之间移动对象以避免 2?

* 其中“many”的意思是“数十,也许是数百,而不是数千”,“some”至少比“many”小一个数量级

交叉张贴到苹果论坛

0 投票
3 回答
913 浏览

objective-c - 如何本地化核心数据实体中属性的默认值

如果我正在创建一个具有非可选字符串属性的实体,例如“name”,我会将“Untitled”作为默认值。如何本地化此默认值?

我可以将实体子类化并使用NSLocalizedStringinawakeFromInsert来执行此操作。但我想知道是否还有其他方法。

编辑:

如果这是唯一的方法,那我很好。只是好奇。

0 投票
2 回答
9896 浏览

iphone - 基于 Core Data 的 iPhone 应用程序的默认数据集

我正在编写一个使用 Core Data 来持久化模型的 iPhone 3.0 应用程序。我希望使用默认数据集安装该应用程序。在为 iPhone < 3.0 开发时,我使用 SQL 脚本在运行构建之前初始化数据库,然后将准备好的 .sqlite 文件部署为应用程序资源。使用 Core Data 的最佳方法是什么。

一个结论:最后我写了一个通用的 XML 处理程序。元素名称映射到 Objective-C 类名称和属性名称。元素中的 PCDATA 值被转换为在元素命名的属性上声明的类型。子元素或属性元素被解析为对象实例——因此通过解析 XML 文档构建了对象图。不过,我必须先掌握 Objective-C 运行时 :-)

示例目标类:

示例默认数据:

0 投票
2 回答
234 浏览

objective-c - 可能的核心数据错误:名为“更新”的属性不能正常工作?

我有一个名为Post. 它的一个属性被调用updated,它是一个日期。存储的 XML 如下所示:

由此我得出结论,数据存储正确。当我读回数据时,返回的值是 a NSCFNumber,而不是 a NSDate

但是,当我将名称从更改为时updatedpubDate它可以正常工作。updated没有在NSManagedObjector的标题中声明NSObject,所以我想它一定是一个私有方法。

有没有其他人经历过这个?我应该向苹果报告吗?

经过几个小时的挠头/嘴巴发怒后,我发现了这一点。

0 投票
1 回答
2647 浏览

iphone - 核心数据中的 mach_msg_trap

mach_msg_trap 错误是什么意思?我正在开发一个带有核心数据的应用程序。如果第二次“使用”不同的线程,则在 ManagedObjectContext 时出现此错误。我有一个生产者消费者类型的线程系统。生产者线程和消费者线程使用相同的底层 sqlite db,但不同的 managedobjectContext 因为它们在不同的线程上。但我希望生产者thead 检查新数据,如果有的话,我希望它更新我的 managedObjectContext。但它第二次运行应用程序崩溃给出上述结果。

请帮忙...

0 投票
2 回答
7547 浏览

objective-c - 更新 NSFetchedResultsController 的结果而不进行新的 fetch

我正在开发一个应用程序,该应用程序将其数据保存在外部 MySQL 服务器中,但使用 Core Data 将其缓存在本地以获得更好的响应时间。基本上,我想做的是:

  1. 从 Core Data(SQLite 数据存储,使用 NSFetchedResultsController)获取数据并显示它
  2. 在后台从 MySQL 服务器抓取新项目
  3. 使用新数据集(新旧项目)刷新当前表视图

除了最后一步,我已经完成了所有这些工作。我不太清楚如何让 NSFetchedResultsController 更新其数据集。到目前为止,我已经尝试将项目直接添加到它的 NSManagedObjectContext:

我还尝试了 Apple 在他们的 CoreDataBooks 示例中所做的事情,并使用了单独的“添加”托管对象上下文和对mergeChangesFromContextDidSaveNotification:. 似乎都没有改变我获取的结果控制器的托管对象上下文中当前的 NSManagedObject*s 集。

我将如何更新 NSFetchedResultsController 当前管理的对象集?