问题标签 [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 回答
3413 浏览

cocoa - NSUndoManager,核心数据和选择性撤消/重做

我正在开发一个核心数据应用程序,该应用程序具有相当大的托管对象层次结构,类似于树。

创建基础对象时,它会创建一些子对象,这些子对象又会创建自己的子对象,依此类推。这些子对象中的每一个都可以使用 NSURLConnections 收集信息。

现在,我想通过 managedObjectContext 中的 undoManager 来支持撤消/重做。问题是,如果用户创建了一个基础对象,然后尝试撤消该操作,则不会删除该基础对象。相反,可以移除一个或多个子对象。显然,这种类型的动作是不可预测的和不受欢迎的。

所以我尝试默认禁用撤消注册。我通过disableUndoRegistration:在 managedObjectContext 中修改任何内容之前调用来做到这一点。然后,在基础操作(例如创建基础对象)之前启用撤消注册,然后再次重新禁用注册。

现在,当我尝试撤消时,出现此错误:

撤消:NSUndoManager 0x1026428b0 处于无效状态,撤消调用嵌套撤消组太多

想法?

0 投票
2 回答
2616 浏览

core-data - 如何清除 NSManagedObjectContext 中的所有对象?

可以在 NSManagedObjectContext 中添加或删除单个对象,只是想知道为什么 NSManagedObjectContext 中没有 API 可以一次清除所有对象?

指定在提交更改时应从其持久存储中删除的对象。

  • (void)deleteObject:(NSManagedObject *)object

为什么没有 clearAllObjects 等 API 一次性删除所有对象?

0 投票
1 回答
2523 浏览

ios - 如何在 Core Data 中获取 MOMD 文件的路径

伙计们,我已经看到了这个问题并使用了

但是,在我的代码中,我希望能够通过 NSLog 打印文件路径以使用 momd 文件的完整路径进行控制台。问题是我不知道如何使用目标 c 提取 MOMD 资源的路径,当我尝试登录managedObjectContent到控制台时,它最终打印出我什至不关心的非常冗长的神秘数据。那么我将如何获取momd 文件的路径呢?请提供示例代码!提前致谢。

0 投票
3 回答
137 浏览

iphone - 中止 managedObjectContext 中的 fetchRequest

我有一个 fetchRequest 最多需要 4-5 秒才能完成。由于它是按您类型搜索的解决方案的一部分,有没有办法中止 fetchRequest?

我使用计时器设置在用户结束输入后 600 毫秒后开始搜索我的数据库。所以有可能新的搜索必须在旧搜索完成之前开始。

我还没有找到任何似乎正确的 NSMangedObjectContext 方法。只是设置旧的 fetchRequest = nil 方法吗?还是在后台发生了什么?

有任何想法吗?

提前致谢!

PS:我也在努力提高我的查询速度。也许有人对此也有想法: https ://stackoverflow.com/questions/4695729/query-performance-with-large-database

0 投票
2 回答
4842 浏览

multithreading - 核心数据和多线程

我已经阅读了 Marcus Zarra 在他的 Core Data 书中关于多线程的一章,并且相当仔细地查看了他的示例代码。但是他的代码和我在其他地方找到的其他代码似乎都集中在不需要相互了解的后台进程。这些示例适用于导入树结构 - 但它们没有解决更一般(复杂)结构的导入,例如有向无环图。

就我而言,我正在尝试解析 C++ 类层次结构,并希望使用尽可能多的 NSOperations。我想为每个遇到的类创建一个 NSManagedObject 实例,并且我想在保存一个时合并不同的 NSManagedObjectContexts。

顺便说一句:我能够使用单个 NSOperation 来迭代文件并一次解析一个。在此实现中,在主线程的 MOC 上调用 -mergeChangesFromContextDidSaveNotification: 的 -mergeChanges: 方法运行良好。

但理想情况下,我会让一个 NSOperation 遍历源文件并生成 NSOperation 来解析每个文件。我尝试了几种方法 - 但似乎无法做到正确。最有希望的是让每个 NSOperation 观察 NSManagedObjectContextDidSaveNotification。使用 -mergeChanges: 看起来像这样:

本质上,解析 NSOperation 的 main() 会定期检查 ivar 'needsToMerge'。如果是真的,那么 -mergeChangesFromContextDidSaveNotification: 在本地 MOC 上被调用并缓存了 NSNotification。然后 needsToMerge 被重置。如果通知来自本地,则主线程被告知在其 MOC 上执行 -mergeChangesFromContextDidSaveNotification:。

我确信这有一个很好的理由为什么这不起作用以及为什么我得到这个:

警告:取消调用 - 当前线程堆栈上的 objc 代码会使这不安全。

我还尝试使用 NSPeristentStoreCoordinator 的锁来控制访问 - 但如果它在调用 NSManagedObjectContext 的 -save: 方法期间被持有,这是有问题的,因为 -save: 将通知感兴趣的观察者保存事件和 -mergeChangesFromContextDidSaveNotification: 似乎阻止尝试获取PSC的锁。

似乎这应该容易得多。

0 投票
1 回答
1266 浏览

sqlite - ios 创建 sqlite db 和 xcdatamodel

我希望使用 nsmanagedobject 在我的项目中使用 sqlite 数据库。我下载了 CoreDataBooks 示例,但有些东西我不明白...

例如......表和xcdatamodel之间的链接在哪里?我试图用我的数据库更改 sqlitedb 并更改 xcdatamodel 但不起作用

你能帮助我吗?谢谢

0 投票
1 回答
1673 浏览

iphone - iPhone:无法使用 appDelegate 访问 NSManagedObjectContext

我曾经在某个时候开始进行 iPhone 开发,并且正在尝试在我的应用程序中实现核心数据。

在执行 FetchRequest 的过程中,我陷入了以下代码......

调试时显示以下错误...

当我运行该应用程序时,它只是崩溃了。

当我在调试模式下按“继续”按钮时,此错误一次又一次出现。

我尝试将我的代码更改为此.....

这可以让应用程序运行,但是当我按下模拟器主页按钮时,控制台中会显示相同的错误。

这里可能出了什么问题?

0 投票
2 回答
1608 浏览

core-data - 特殊情况下如何将 ManagedObjectContext 传递给其他视图控制器

我有一个像这样的rootViewController:

标题:

执行:

但我需要将 managedObjectModel 转移到我的表视图,然后转移到地图视图,以便地图视图可以根据用户想要查看的内容进行查询。我正在咨询一些看起来像(来自Recipes)的苹果示例代码:

I know that is in the appDelegate, but I figure that I can do the same when a row is selected or another view is pushed onto the stack, right? 问题是我已经用一个看起来像这样的笔尖配置了我的大部分视图:

替代文字

因此,我无法使用 Apple 用于将 managedObjectModel 传输到备用 viewController(在本例中为 PermitListViewController)的类似策略,因为在添加子视图时我不直接访问 PermitListViewController。如果有人知道我将如何将 managedObjectModel 放到我的 PermitListViewController 中。请分享!提前致谢!

编辑:我正在考虑将 managedObjectModel 放在一个单例类中。小伙伴们对此有何看法?良好的编程习惯?有什么我应该注意的吗?谢谢。

0 投票
2 回答
3815 浏览

cocoa - 使用 NSManagedObjectContext 的 objectWithID 的“正确”方式是什么:

文档状态:

...此方法始终返回一个对象。假定 objectID 表示的持久存储中的数据存在 - 如果不存在,则在您访问任何属性时(即触发故障时),返回的对象将引发异常。这种行为的好处是它允许您创建和使用故障,然后在以后或在单独的上下文中创建基础行。

在 Apple 的“Core Recipes”示例应用程序中,该方法的结果用于填充 NSFetchRequest,然后使用请求的结果,并带有注释:

我已经看到了许多objectWithID直接使用结果的示例(其他代码和苹果的“iClass”) - 意思是,它的属性被访问并愉快地处理。

应该objectWithID 始终被视为“可能存在”的对象吗?

我之所以问,是因为我刚刚遇到了这个问题,并没有反对它的存在。

0 投票
2 回答
4282 浏览

ios - ID:[...] 的 NSManagedObject 已失效

我正在使用核心数据构建应用程序。由 appDelegate 加载的我的 RootViewController 主要来自模板。但是我已将实体名称更改为“时钟”并添加了一堆行。

我的 RootViewController 提供了一个具有 UINavigationController 的 MVC。当我将数据保存到我的数据库时,UINavigationController 类保存了[[UIApplication sharedApplication]delegate]用于访问我的 appDelegate 的数据,该 appDelegate 实际执行了保存操作。编辑数据的方式相同,但不是在我的应用程序委托中调用插入函数,而是调用更新函数。

现在,这一切都很好……实际上非常完美。但是......几次打开编辑并保存在视图中后,我的应用程序崩溃了。它在模拟器和我的 iPhone 4 上都这样做。这是我的意思的一个例子(电影):http ://dl.dropbox.com/u/3077127/has_been_invalidated.mov

这是我的 RootViewController.m 的代码:

编辑
这是保存按钮的代码, AddClockNavigationController.m

ClockAppDelegate.m

我做错了什么?

最好的问候,
保罗·皮伦