问题标签 [nspersistentstore]

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

objective-c - 如何管理备用类中的核心数据?

这是我声明的 .h 文件

这是 .m 文件

问题:

  1. 如何在不在 AppDelegate 类中的视图控制器中声明核心数据?

  2. 在 AppDelegate 中使用此代码时,它的工作原理是什么?

  3. 在我进入普通班级后,它给了我错误

    like=[AppDelegate managedObjectContext]

0 投票
2 回答
544 浏览

performance - 核心数据中缓慢加载的持久存储协调器

我一直在使用 Core Data 开发一个 Cocoa 应用程序。最初一切似乎都很好,但是当我向应用程序添加数据时,我发现初始数据窗口需要很长时间才能加载。为了解决这个问题,我移到了另一个没有数据的启动窗口,所以启动很迅速。但是,无论我做什么,我的第一次获取和我第一次尝试加载数据窗口(带有表格视图)总是很慢。(也就是说,如果我缓慢地获取然后请求数据窗口,那么第一次两者都会很慢。)之后,性能是可以接受的。

我跟踪了我的应用程序,发现虽然我可以快速单步执行程序,但无论如何,检索持久存储协调器的步骤非常慢……旋转的沙滩球可能需要 15 到 20 秒。

我在其他地方读过我可能想要对数据进行非规范化。我认为这还不够。早期版本在实体之间的“互连”要少得多,而且它在启动时仍然是一个蛞蝓。现在我正在查看可能拥有多达 18,000 个托管对象的实体。某些关系对于使数据正常工作至关重要。

我还阅读了有关在后台使用单独的托管对象上下文的选项。这样做的问题是,即使是这个背景上下文也需要很长时间才能使用。如果用户尝试运行搜索,他或她仍将永远等待该上下文加载。当用户决定在搜索字段中输入什么内容时,我可能会为自己争取几秒钟,但我不能拖延 25 秒。

我注意到,一旦将数据导入到持久存储中,即使在与其他表无关(并且只有 1000 个对象)上搜索仍然需要很长时间才能加载。原因似乎是协调器检索本身很慢,而不是实际的获取或上下文。

谁能指出我如何解决这个问题的正确方向?谢谢!

0 投票
1 回答
391 浏览

ios - NSPersistentStoreCoordinator 在尝试访问 sqlite 文件时引发错误 NSSQLiteErrorDomain=26

最近我添加了一些对我的不同域模型(代表持久数据的子集)的并发访问。我的崩溃报告显示我现在偶然发现了 iOS7、iOS8 和 iOS9 上的一些错误,这些错误似乎都是基于

NSSQLiteErrorDomain=26, NSUnderlyingException=File at path 似乎不是我在源代码中标记的位置的 SQLite 数据库

不幸的是,我无法重现它,我也无法想象某些设备上不存在 sqlite 文件,因为我将它与我的应用程序捆绑包一起提供。

  1. 我的代码中是否存在阻止我访问 sqlite 文件的缺陷?
  2. 除了丢失的文件之外,还有其他可能发生此错误的可能性吗?

这是我的模型单例初始化的源代码和NSManagedObjectContext

0 投票
1 回答
2501 浏览

ios - NSPersistentStoreCoordinator 没有持久存储。它无法执行保存操作。(iOS 9)

在我的应用程序中,我使用 CoreData 来保存数据,并且我正在从服务器推送和拉取数据。我还使用同一个帐户跨多个设备同步数据。

但最近,我从 crashLytics 报告中得到了这个崩溃。

所以在我下面的函数中,我以这种方式调用“saveContext”方法。

创建 ManagedObject 上下文 (MOC)

所以我几乎没有怀疑。

1)我应该"[appDelegate saveContext]"每次都调用,数据是从服务器接收的,还是应该只在应用程序退出时保存。

2) CrashLytics 报告指向"[appDelegate saveContext]". 这也发生在 iOS 9 上。

3)我无法在运行 iOS 9 的设备上复制此问题。因此不了解用户是否真的看到了此崩溃,以及此错误的后果是什么。

0 投票
1 回答
227 浏览

ios - 子父上下文保存冲突

NSManagedObjectContext保存孩子并将更改推送给父母时如何解决冲突NSManagedObjectContext

例如,假设您通过在具有来自服务器的数据的子上下文上将NSManagedObject Person属性设置为 18 来进行更新。同时,用户在父节点上将相同的属性更新为 20 的值。ageNSPrivateQueueConcurrencyTypeNSManagedObject Person ageNSManagedObjectContextNSMainQueueConcurrencyType

在两次更新之后,对子上下文调用保存,该上下文传播到父上下文NSManagedObjectContext

此时年龄的价值是多少?孩子会NSManagedObjectContext覆盖父母NSManagedObjectContext吗?在这里申请吗NSMergePolicies

0 投票
1 回答
54 浏览

ios - 无法从 iCloud 迁移永久存储

我正在尝试从我的应用程序中删除iCloud同步功能。NSPersistentStore迁移不会返回任何错误,但是,启用 iCloud 的持久存储中的数据会在迁移后消失。

以下是我的相关代码:

0 投票
2 回答
302 浏览

ios - CoreData:将瞬态属性与只读持久存储一起使用

处理持久存储中的托管对象 ( NSManagedObject)read-only我试图使用瞬态属性来存储一些临时值。考虑到瞬态属性没有保存到持久存储中,我认为将它们用于缓存目的没有任何问题。但事实证明,即使在read-only存储的托管对象的瞬态属性中,您也无法写入数据。在NSManagedContext保存操作期间出现此错误

“无法将对象更新为只读存储”

(我确信只有瞬态属性被改变了。)

这是为什么?它可以被认为是一个NSManagedObjectContext错误吗?感谢您分享您的想法。

0 投票
0 回答
1399 浏览

ios - iOS 核心数据 NSPersistentStoreCoordinator 从未打开数据库

我的 iOS 中的 Core Data 有一些奇怪的问题,我似乎无法重现,它只是不时发生在一些报告它的用户身上。我从 iOS 崩溃报告中得到的错误:

核心数据:-[NSPersistentStoreCoordinator _coordinator_you_never_successfully_opened_the_database_so_saving_back_to_it_is_kinda_hard:] + 56

这是一个屏幕截图(省略了产品名称):

在此处输入图像描述

困难的是我没有得到任何关于该错误的搜索结果。这是我的(相关)代码:

保存:

商务部:

PSC:

妈妈:

这里的设置似乎没问题,因为 99% 的时间它都可以工作,但有时我会收到我没有打开数据库的错误。由于我无法调试,因此很难弄清楚是什么原因。PSC可能为零吗?那为什么会这样呢?另外,我知道 MOC 应该只绑定到 1 个线程,并且由于我无法让它崩溃,我认为这不会有问题吗?

感谢您的任何建议!

0 投票
1 回答
1423 浏览

ios - 为现有 sqlite 上的持久存储管理器更改 NSPersistentStoreFileProtectionKey

在应用程序处于后台时调用 addPersistentStoreWithType 时,我的sqlite文件有时不可用并且我收到此错误:

[Model createPersistentStoreCoordinatorWithStoreURL:] line 387 $ sqlite 加密状态 NSFileProtectionCompleteUntilFirstUserAuthentication 错误:错误域=NSCocoaErrorDomain Code=256“操作无法完成。(Cocoa 错误 256。)”UserInfo=0x1560e540 {NSUnderlyingException=授权被拒绝,NSSQLiteErrorDomain=23}

我发现这是因为该文件仍然受到保护(默认情况下NSFileProtectionCompleteUntilFirstUserAuthentication,用户在重新启动后第一次解锁他的设备后,受保护的数据可用)。我觉得这行为不正确,因为我有大量的崩溃,我无法想象很多人在野外重启后仍然锁定他们的设备。

因此,我现在正在添加我的持久存储协调器,并像这样调整配置

问题:

  1. 如果设备被锁定,这是否可以确保文件在后台也可用?
  2. 如果我更改,这会破坏 sqlite(/ 内部数据)NSPersistentStoreFileProtectionKey吗?
  3. 我没有在数据库中存储敏感数据,但是,您在使用时是否看到安全问题NSFileProtectionNone
0 投票
1 回答
191 浏览

ios - 'NSPersistentStore' 类型的值永远不能为零,不允许比较

我如何用最新的 swift2 语法修复它?
谢谢

'NSPersistentStore' 类型的值永远不能为 nil,不允许比较
Call 可以抛出,但它没有标记为 'try' 并且不处理错误

在此处输入图像描述