通过新的 NPrivateQueueConcurrencyType 进行核心数据后台获取

2024-02-01

现在iOS5真的这么简单了吗?

我曾经在 AppDelegate 中使用以下代码执行后台获取:

dispatch_queue_t downloadQueue = dispatch_queue_create("DownloadQueue", NULL);
dispatch_async(downloadQueue, ^{
        self.myDownloadClass = [[MyDownloadClass alloc]initInManagedObjectContext:self.managedObjectContext];
        [self.myDownloadClass download];
    });

dispatch_release(downloadQueue);

我的下载类执行 NSURLConnection 来获取一些 XML 数据,使用 NSXMLParser 解析数据,然后更新核心数据中的复杂架构。我总是切换到主线程来实际更新核心数据。代码混乱,大量调用dispatch_sync(dispatch_get_main_queue()....

我的新代码如下所示:

NSManagedObjectContext *child = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[child setParentContext:self.managedObjectContext];

[child performBlock:^{
    self.myDownloadClass = [[MyDownloadClass alloc]initInManagedObjectContext:child];
    [self.myDownloadClass download];
    }];

对我的 AppDelegate 中的其他代码进行一些小更改,将父模型对象上下文类型设置为 NSMainQueueConcurrencyType:

- (NSManagedObjectContext *)managedObjectContext
{
    if (__managedObjectContext != nil)
    {
        return __managedObjectContext;
    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil)
    {
        __managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
        [__managedObjectContext setPersistentStoreCoordinator:coordinator];
    }
    return __managedObjectContext;
}

看起来效果很好。整个更新过程仍然在单独的线程中运行,但我不必创建线程。看起来就像魔法一样。

请记住,如果您想将更改提交到物理核心数据文件,您也可以在父上下文上调用 save: 。

我真的没有在这里问问题。我发布此内容是为了对其他人有所帮助,因为我在搜索新的 iOS5 托管对象上下文方法时发现的所有内容都只提供了高级详细信息,没有代码示例并且所有其他在后台获取核心数据的搜索都是旧的,有时非常旧,并讨论在 iOS5 之前如何做到这一点。


是的 - 现在真的就是这么简单(在 iOS 5.0 中)。对于 iOS 4 兼容性,之前的障碍仍然存在,但文档在线程限制方面还不错。也许您应该将其添加到 wiki 部分?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过新的 NPrivateQueueConcurrencyType 进行核心数据后台获取 的相关文章

  • C# 或 Windows 相当于 OS X 的 Core Data?

    我迟到了 现在才开始在 OS X Cocoa 中使用 Core Data 它令人难以置信 并且确实改变了我看待事物的方式 C 或现代 Windows 框架中是否有等效的技术 即拥有可免费保存 数据管理 删除 搜索的托管数据类型 还想知道Li
  • ios 8 核心数据崩溃

    保存时 CoreData 发生崩溃 2014 09 16 09 51 58 273 My app 2678 105246 Terminating app due to uncaught exception NSInvalidArgument
  • 正则表达式和 ios5 stringByMatching ==> NSRegularExpression

    如何使用等效的 NSRegularExpression 更改此行 NSString encodedPoints apiResponse stringByMatching points capture 1L 谢谢 请记住 您需要 iOS 4
  • UIBarButtonItem + popover segue 创建多个 popover

    我目前有一个 iPad 应用程序 其 UIToolbar 包含两个 UIBarButtonItems 每个都连接到弹出框 segue 当用户触摸任一 UIBarButtonItems 时 将创建弹出窗口而不是切换弹出窗口 这会创建多个重叠的
  • NSSortDescriptor 和多对多关系

    我有两种反对意见 地点和历史项目 我正在尝试获取附加到任何历史记录项目的位置 因此该位置的获取谓词是 history count gt 0 效果很好 我还想使用 NSSortDescriptor 按最新历史项目的日期对位置对象进行排序 据我
  • 将子视图发送到后面

    我正在尝试模仿 facebook ios 侧面菜单并让它工作 但是我遇到的问题是我无法将侧面菜单发送到后面 正如另一个问题中所讨论的那样使用 Objective C 的 iphone facebook 侧边菜单 https stackove
  • Xcode 9.2 UIDocumentBrowserViewController:无法从 bookmarkableString 创建 url

    Update Xcode 9 3 已修复它 在创建 UIDocument 文件时UIDocumentBrowserViewController 默认 错误 无法解析书签 错误 错误域 NSFileProviderInternalErrorD
  • 如何使用 Restkit 0.20.0 创建/发布新的托管对象到服务器?

    我很难找到创建新托管对象 设置其值以及使用 Restkit 保存到服务器的文档或示例 我有一篇 NSManagedObject 帖子 interface Post NSManagedObject property nonatomic ret
  • iOS 6 中已弃用的代码回退到 iOS 5

    我有这个自定义后退按钮 IBAction backToMenu id sender self presentingViewController dismissModalViewControllerAnimated YES 在 iOS 6 模
  • iOS wifi扫描、信号强度

    据我所知 不可能扫描范围内的热点并读取它们的 bssid 和信号强度 这在 iOS 4 上可以通过使用私有 API 实现 但在不越狱的 iOS 5 上则不再可能 即使可能 该应用程序也会在 App Store 上被拒绝 是对的吗 一家拥有室
  • EKCalendarChooser 多选不起作用

    我正在尝试使用EKCalendarChooser获取用户选择的多个日历 我是这样表达观点的 EKCalendarChooser dvc EKCalendarChooser alloc initWithSelectionStyle EKCal
  • ARC 禁止结构或联合中的 Objective-C 对象,尽管标记了文件 -fno-objc-arc

    ARC 禁止结构或联合中的 Objective C 对象 尽管标记了文件 fno objc arc 为什么会这样呢 我假设如果你将其标记为 fno objc arc 你就没有这个限制 如果您收到此消息 请尝试 unsafe unretain
  • 如何提高 iPhone 上的核心数据获取性能?

    Core data在iPhone上的表现绝对是惨不忍睹 索引是完全损坏还是只是一个糟糕的实现 我的核心数据存储 SQLite 后备存储 中有大约 21500 个单一类型的对象 这些对象在 UUID 上建立索引 该 UUID 是一个 NSSt
  • 在核心数据中伪造动态模式?

    通过阅读有关 Core Data 的 Apple 文档 我了解到当您需要动态模式时不应该使用 Core Data 如果我想为用户提供创建自己的属性的能力 那么在核心数据模型中 如果我创建一些 虚拟 属性 例如 自定义十进制 1 自定义十进制
  • iOS 5:UIImagePickerController 崩溃

    我面临的问题是UIImagePickerController在 iOS 5 中 我的应用程序开发于iOS4 3但现在我将其升级为iOS5 当我尝试从照片库中选择图像时 我的应用程序崩溃了 它在 main m 文件中崩溃EXE BAD ACC
  • 获取实体中某个值的最大值

    我正在尝试获取核心数据中实体中属性的最大值 苹果有一个很好的例子here http developer apple com library mac documentation Cocoa Conceptual CoreData Articl
  • CoreData 获取属性的不同值

    我正在尝试设置我的NSFetchRequest核心数据以检索实体中特定属性的唯一值 IE 具有以下信息的实体 name rate factor John 3 2 4 Betty 5 5 7 Betty 2 1 2 Betty 3 1 2 E
  • CoreData:是否将图像存储到数据库?

    我正在制作一个应用程序 它从网站上为某些用户名拍摄照片 并将其显示在带有用户名的 UITable 中 然后当单击用户名时 它会显示该用户的照片 然后单击照片名称 它会显示全屏照片 我的问题是我正在使用 NSData 从互联网获取照片 我必须
  • 如何在 Core Data 中存储图像?

    只是猜测 我创建一个属性并将其类型设置为 二进制 但最终我该如何使用它呢 我猜幕后有一个 NSData 那么该属性实际上采用 NSData 吗 这个问题已经被问过很多次了 答案有点复杂 当涉及二进制数据时 您应该根据要使用的数据的预期大小来
  • 从一个模态视图无缝翻转到另一个模态视图,而不显示纯色背景

    我的 iPad 应用程序的 UI 如下 当我点击Settings按钮 我希望对话框水平翻转以显示设置对话框 我这个工作正常 但是 当对话翻转时会显示背景颜色 如你看到的 有什么办法可以让对话框翻转时不显示该颜色块吗 我希望它看起来更加无缝

随机推荐