在我的应用程序中,我能够清除数据库中的所有数据.完成此操作后,将解析捆绑的 JSON,然后将其保存到数据库(以便将数据库返回到默认状态).解析和保存此JSON的操作在任何情况下都可正常工作,除非在清除并重新创建持久性存储之后,在这种情况下我得到’NSinvalidargumentexception’,原因:’无法从此NSManagedobjectContext的协调器访问对象的持久存储’.在保存在后台上下文中后尝试在我的主线程上下文中调用mergeChangesFromContextDidSaveNotification时抛出此异常.

重新创建存储是在主线程上执行的,因为解析和保存总是在后台线程上进行.这是我的托管对象上下文的getter,以确保线程安全:

- (NSManagedobjectContext *)managedobjectContext {

    NSMutableDictionary *threadDictionary = [[NSThread currentThread] threadDictionary];
    NSManagedobjectContext *threadcontext = threadDictionary[ckCoreDataThreadKey];

    if (!threadcontext) {
        threadcontext = [self newManagedobjectContext];
        threadDictionary[ckCoreDataThreadKey] = threadcontext;
    }

    return threadcontext;
}

newManagedobjectContext方法为所有新实例提供相同的NSPersistentStoreCoordinator对象.

以下是用于清除存储的代码(始终在主线程上执行):

[self.managedobjectContext lock];
[self.managedobjectContext reset]; //to drop pending changes
                                       //delete the store from the current managedobjectContext
if ([[self.managedobjectContext persistentStoreCoordinator] removePersistentStore:[[[self.managedobjectContext persistentStoreCoordinator] persistentStores] lastObject] error:error]) {
    [[NSFileManager defaultManager] removeItemAtURL:storeURL error:error];

    [[self.managedobjectContext persistentStoreCoordinator] addPersistentStoreWithType:NSsqliteStoreType configuration:nil URL:storeURL options:nil error:error]; //recreates the persistent store

    [self addSkipBackupAttributetoItemAtURL:storeURL];
}

[self.managedobjectContext unlock];

奇怪的是,这个相同的代码在其他项目中运行良好,除了数据内容之外没有其他区别.任何帮助是极大的赞赏!

解决方法

The “Object’s persistent store is not reachable from this NSManagedobjectContext’s coordinator

此消息表示您尝试使用从刚删除的数据存储中加载的托管对象.您从协调器中删除了持久性存储并删除了存储文件,但您仍然至少有一个从该存储加载的NSManagedobject.您不能再使用这些对象,因为如果这样做,您将获得此特定异常.确保在第二个代码段中的Core Data堆栈上进行核攻击之前,先删除任何现有的托管对象.

至于为什么它在不同的应用程序中工作,很可能该应用程序不会持有陈旧的托管对象.

ios – 重新创建Persistant Store后的核心数据错误的更多相关文章

  1. ios – 重新创建Persistant Store后的核心数据错误

    在我的应用程序中,我能够清除数据库中的所有数据.完成此操作后,将解析捆绑的JSON,然后将其保存到数据库(以便将数据库返回到默认状态).解析和保存此JSON的操作在任何情况下都可正常工作,除非在清除并重新创建持久性存储之后,在这种情况下我得到’NSinvalidargumentexception’,原因:’无法从此NSManagedobjectContext的协调器访问对象的持久存储’.在保存在后

  2. core-data – 错误: – [UIImage _deleteExternalReferenceFromPermanentLocation]无法识别的选择器发送到实例

    当我删除包含图像的托管对象时,在外部记录中存储为可转换值,然后我崩溃并出现此错误:解决方法我在AppleDeveloperforums回答了类似的事情.我猜你在数据建模器中的那个字段上选择了外部存储复选框.有一个bug可以解决.我是这样做的:一旦更新了数据并保存了上下文,任何删除它的尝试都会引发这个“无法识别的选择器”异常.要强制可以响应_deleteExternalReferenceFromPe

  3. ios – 通过objectID获取NSManagedObjects数组返回空数组

    TL;DR其持久性存储协调器不再在内存中的NSManagedobjectID会丢失其NSEntityDescription(实体),并且不会将等同于来自不同持久性存储协调器的NSManagedobjectID,即使它们的URIRepresentation相同也是如此.沿着兔子洞甜蜜……),因为这些objectID来自的PSC现在不再在内存中,并且NSManagedobjectID必须保持对必须由PSC持有的NSEntityDescription(实体)的一周引用.正如评论者所怀疑的那样,零实体似乎会引起问

  4. ios – NSPersistentStoreCoordinator有两种类型的持久存储?

    在iOS应用程序中,我想使用NSPersistentStoreCoordinator和NSIncrementalStore子类,用于从RESTAPI获取数据,也可以使用sqlite存储来保存到磁盘.但是,如果我将两种类型的持久性存储添加到我的协调器中,那么在我的托管对象上下文中调用save:没有任何效果.如果我只添加一个持久存储,而不是我的NSIcrementalStore子类的类型,那么保存按照

  5. Swift37/90Days - iOS 中的设计模式 (Swift 版本) 02

    )更新声明翻译自IntroducingiOSDesignPatternsinSwift–Part2/2,本教程objc版本的作者是EliGanem,由vincentNgo更新为Swift版本。如何使用适配器模式横滑的滚动栏理论上应该是这个样子的:新建一个Swift文件:HorizontalScroller.swift,作为我们的横滑滚动控件,HorizontalScroller继承自UIView。在HorizontalScroller类里添加一个新的委托对象:为了避免循环引用的问题,委托是weak类型。H

  6. OpenStack对象存储――Swift

    Swift前身是RackspaceCloudFiles项目,随着Rackspace加入到OpenStack社区,于2010年7月贡献给OpenStack,作为该开源项目的一部分。Swift目前的最新版本是OpenStackEssex1.5.1。Swift特性在OpenStack官网中,列举了Swift的20多个特性,其中最引人关注的是以下几点。在OpenStack中还可以与镜像服务Glance结合,为其存储镜像文件。Auth认证服务目前已从Swift中剥离出来,使用OpenStack的认证服务Keysto

  7. 对象存储系统Swift技术详解:综述与概念

    通过阅读Swift的技术文档,我们可以理解其中的设计的原理和实现的方法。本人于9月底开始接触swift,刚开始看文档的时候一知半解,有幸阅读了zzcase等人的博客,才得以入门。随着对swift设计原理的理解和源码的深入,文档经过数次反复的修改,希望对各位学习swift的童鞋有所帮助,水平有限,若各位发现有错误之处,恳请指出。

  8. Swift2.0语言教程之类的属性

    Swift2.0语言教程之类的属性类虽然函数可以简化代码,但是当一个程序中出现成百上千的函数和变量时,代码还是会显得很混乱。Swift2.0语言的类与对象类是一种新的数据类型,类似于生活中犬类、猫类等等。Swift2.0语言中类的组成在一个类中通常可以包含如图8.1所示的内容。Swift2.0语言存储属性存储属性就是存储特定类中的一个常量或者变量。

  9. Swift:什么时候使用结构体和类

    发布于2015年8月14日世界上对swift持续不断的讨论话题中有一个就是什么时候使用结构体什么时候使用类。这个例子对应下面Swift的举例:和之前的打印结果一样:值类型的体验值类型不是一个新的概念,但是对于很多人来说他们觉得这是新的。很多认为“一切皆对象”的语言如Python、JavaScript等也都只有引用类型。Swift对此说“yes”,那也就意味着Array,Dictionary和String都是结构体而不是类。

  10. 《转》OpenStack对象存储——Swift

    Swift前身是RackspaceCloudFiles项目,随着Rackspace加入到OpenStack社区,于2010年7月贡献给OpenStack,作为该开源项目的一部分。Swift目前的最新版本是OpenStackEssex1.5.1。Swift特性在OpenStack官网中,列举了Swift的20多个特性,其中最引人关注的是以下几点。在OpenStack中还可以与镜像服务Glance结合,为其存储镜像文件。Auth认证服务目前已从Swift中剥离出来,使用OpenStack的认证服务Keysto

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部