问题标签 [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.
cocoa - 如果我没有在创建它们的线程上显式访问它们,那么操作我在线程之外创建的对象是否安全?
我正在开发一个可可软件,为了在大量数据导入(核心数据)期间保持 GUI 响应,我需要在主线程之外运行导入。
如果我在线程运行时没有显式访问这些对象,即使我在主线程中创建它们而不使用锁,访问这些对象是否安全。
objective-c - setPrimitiveValue:forKey: 和多对多关系
在使用它来管理多对多关系时,Apple 的文档在两个方面是模糊的。-setPrimitiveValue:forKey:
他们首先声明:
如果您尝试为新的 NSMutableSet 对象设置一对多关系,它将(最终)失败。
最终?!那有什么意思?以后会不会失败-[NSManagedObjectContext save:]
?当一个托管对象变成一个故障然后又被分页回来?什么时候?我可以编写一个测试用例来始终如一地按需重新创建故障吗?
其次,提供示例代码来正确处理这种情况,他们写道:
首先使用获取现有集合
primitiveValueForKey:
(确保方法不返回nil
)
如果/当方法返回 nil 时我该怎么办?assert()
它并立即失败,因为这意味着整个对象图已损坏并且保存会导致数据丢失?NSAssert()
在它上作为对呼叫者的警告但按下(默默地什么都不做)?
现在我只是NS[Mutable]Set
在这种情况下直接分配我想要的,如下所示:
那是错的吗?
cocoa - 来自合并模型的 NSManagedObjectModel 中的跨模型关系?
如果实体总是在通过合并相关模型创建的 NSManagedObjectModel 中使用,是否可以对在单独的 NSManagedObjectModels 中定义的实体之间的关系进行建模?
例如,假设模型 1 定义了Foo
具有关系(一对一)toBar
的实体,而模型 2 定义了Bar
具有关系(一对一)的实体toFoo
。我将使用合并模型 1 和模型 2 来构建 CoreData 堆栈-[NSManagedObjectModel mergedModelFromModels]
。有没有办法在数据建模器中或以编程方式定义这些关系,以便它们表现得好像它们是模型内关系?
cocoa - 为多键自动生成谓词行模板?
在我的核心数据托管对象模型中,我有一个实体 Foo,它与名为 baz 的实体 Baz 具有一对多关系(具有一对多逆向)。Baz 有一个名为“tag”的字符串属性。当我使用[NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:[NSArray arrayWithObject:@"baz.tag"] inEntityDescription:FooDescription]
为 NSPredicateEditor 创建行编辑器时,结果包含(如预期的那样)一个行模板,如
[弹出:baz.tag] [弹出:包含|是|不是|...] [TextField]
当我从弹出窗口中选择“包含”时,带有谓词的查询按预期工作。如果我选择任何其他弹出窗口(例如“is”),我会收到以下错误:“此处不允许对多键”。我可以使用[NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:inEntityDescription:]
还是必须手动构建行编辑器?
cocoa - 为自动生成的谓词行模板修改 NSDatePicker
如何修改由返回的属性NSDatePickerElementFlags
的NSDatePicker
行内模板?我想显示小时:分钟以及日期。NSDate
[NSPredicateRowEditorTemplate templatesWithAttributeKeyPaths:inEntityDescription:]
NSDatePicker
更新 我在下面添加了一个答案,从 cocoa-dev 列表中收集。
cocoa - Core Data 中的错误处理
几周前,我第一次在一个重要的应用程序中使用 Core Data。让我感到惊讶和困惑的一件事是错误处理的工作原理。举个例子,我尝试的第一件事就是在 Finder 中将我的数据文件设置为“锁定”,以确保在设置文件 URL 时正确处理引用返回的 NSError 对象。令我惊讶的是,持久存储协调器没有返回 nil 并设置 NSError,而是从底层 NSData 引发了一个未捕获的异常!
同时,有时在 Core Data 中错误处理似乎有点不必要。例如,我看不出任何明显的原因,为什么 fetch 请求需要除程序员错误之外的错误处理(顺便说一下,根据我的经验,这也会引发异常)。在这些情况下,我一直在为 NSError 引用指针传递 NULL。
在 try/catch 块和 NSError 之间,我可能会花很多时间编写代码来安抚 Core Data,但我希望对此更加实用,所以我不会花时间在永远不会运行的错误代码上。考虑到这一点,您如何处理应用程序中的错误处理?你在现实世界中看到了哪些你应该确保解释的错误?
cocoa - 获取核心数据实体,但不获取子实体
假设我有以层次结构组织的实体,它们Parent
是根实体并Child
是Parent
. 我想设置一个NSArrayController
来仅获取 的实体Parent
,但不获取Child
。
如果在 Interface Builder 中将数组控制器的实体名称设置为,Parent
它将获取所有实体。我最初尝试在 Interface Builder 中将数组控制器的 fetch 谓词设置为:Parent
Child
这适用于 XML 存储,但是当我切换到 SQLite 存储时,它不再有效。我收到以下错误:
作为一种解决方法,我在我的中设置了一个过滤谓词(具有与上述相同的entity.name
谓词)awakeFromNib
来仅过滤父实体。显然,一旦实体在内存中,该谓词就有效,但您不能在 SQL 支持的提取谓词中使用它。
有没有办法只获取Parent
实体,而不是Child
使用与 SQLite 存储一起使用的获取谓词的实体?使用过滤谓词引入您只会忽略的实体似乎很浪费。
cocoa - 在使用 Core Data 和推出自定义模型之间有哪些决定因素?
可能有一些应用程序不适合 Core Data - 例如 Photoshop 或 Gimp 等图像处理程序。但是对于适合 Core Data 的应用程序,比如 Address Book 或 iCal,选择 Core Data 而不是自定义模型的标准是什么?
objective-c - 你能绑定到 NSDatePicker 的 timeInterval 属性吗?
我有一个核心数据应用程序,它有一个事件类,它有一个开始日期和一个结束日期。将这些绑定到一对 NSDatePicker 小部件是微不足道的,但我想让它与 Leopard 中可用的 NSRangeDateMode 一起工作。
NSDatePicker 有一对处理 timeInterval 的方法,但我似乎无法绑定到这个。
更新:我已经使用手动调用来进行绑定,它只工作了一半:
它在底层对象改变时设置 NSDatePicker 中的 timeInterval,但在 NSDatePicker 的 timeInterval 改变时不设置底层对象。
macos - 没有“文档已更改”警告的手动核心数据模式迁移?
我的基于 Core Data 文档的应用程序(仅限 10.5)的数据模型位于框架中,因此使用 Core Data 映射模型的自动模式升级似乎不起作用。当 Core Data 机器不在应用程序的主包中时,它们似乎找不到合适的数据模型或映射模型。因此,我没有使用自动迁移,而是
configurePersistentStoreCoordinatorForURL:ofType:...
在我的
NSPersistenDocument
子类(下面的代码)。我将持久存储迁移到一个临时文件,然后在迁移成功时覆盖现有文件。然后该文档显示错误消息“自从您打开或保存此文档的文件已被另一个应用程序更改”。当我尝试保存时。正如此列表中的其他人所指出的,这是由于我在“背后”修改了文档的文件。我尝试更新文档的文件修改日期,如下所示,但随后出现错误对话框,显示消息“无法确定文档“test.ovproj”的位置。” 当我尝试保存时。我不太确定这个错误的原因,但是将一个不必要的消息(在这种情况下)换成另一个并不是我想要的。
任何人都可以提供一些指导吗?有没有办法手动升级文档持久存储的架构而不触发其中一个(在这种情况下是不必要的)警告?
用于升级我的子类中的数据存储的代码
-configurePersistentStoreCoordinatorForURL:ofType:...
: