【问题标题】:Can we store NSURLRequest directly into Core Data?我们可以将 NSURLRequest 直接存储到 Core Data 中吗?
【发布时间】:2017-05-27 09:47:27
【问题描述】:

我正在开发 iPad 应用程序,我需要在其中创建多个 NSURLRequest。 什么时候失败,我需要再次触发该 URL 请求。

我有三种类型的请求(创建学校、创建楼层和创建房间),其中包含多个不同的创建请求参数。

当有互联网可用时,可以触发重试方法,该方法具有在第一次请求时创建的相同对象。

所以我尝试创建三个表,并尝试存储所有参数及其状态。

是否可以使用 NSURLRequest 创建单表而不考虑 CREATE REQUEST?

【问题讨论】:

  • 您不能将NSURLRequest 直接存储在Core Data 中。您只能存储 NSManagedObject 实例。您可以创建一个实体,允许您存储重新创建请求所需的信息。
  • NSURLRequest 是符合NS(Secure)Coding 的,所以应该翻译成NSData。这是可能的。
  • @Larme 您是说我们需要将 NSURL 请求转换为 NSData 类型。正确的?如果它作为 NSData 保存在数据库中,那么我们如何知道哪个请求发送到服务器。我们是否需要解码 NSData 并发送到服务器?
  • 您可以将其保存为托管对象的属性。该对象可能会以某种方式识别自己,以便您了解其属性。您可能想查看 Apple 的 Core Data Programming Guide

标签: ios objective-c ipad core-data


【解决方案1】:

所以我想出了自己的想法,并与所有人分享。

根据我的阅读和谷歌搜索,我无法将 NSURLRequest 存储到核心数据中。因为我不知道对象的类型。

我将创建包含 PARAMS、METHODS、URL 列的核心数据表

所以我可以创建包含 PARAMS(字典)、方法(PUT、GET 等)、URL 列的表。

我会做什么,我可以将 DICT 参数转换为 NSKeyedArchiver 并将其保存到 PARAM 列中。 URL 和 METHODS 在单独的列中。

当我需要保存请求时,我可以从表中获取它并发送到服务器。

【讨论】:

    【解决方案2】:

    Core Data 实体对应NSManagedObject 的实例或NSManagedObject 的子类,因此您不能直接保存URL 请求。您可以做的是创建一个名为 SavedRequest 之类的实体,该实体具有表示 URL 请求的属性 - 可能还有关于请求的其他一些详细信息(您可能需要的任何其他信息 - 可能是日期?)。

    由于NSURLRequest 符合NSCoding,您将使用Core Data“可转换”类型创建此属性。 Core Data 将根据需要使用NSCoding 自动转换为NSData 或从NSData 转换。您可以为该属性分配一个NSURLRequest 并读回它们,Core Data 会将它们保存为NSData

    根据您的描述,Core Data 可能没有意义。听起来你只是想保存一个 URL 请求列表,然后再读回来,而不需要 Core Data 提供的额外功能。将您的 NSURLRequest 对象放在一个数组中,然后将该数组保存到文件或用户默认值会更简单。您可以自己转换为NSData 或从NSData 转换,但由于您可以使用NSCoding,这很容易。

    要保存数组,您可以执行以下操作,假设一个名为 myArray 的数组包含 URL 请求和 filePath 中的路径:

    BOOL success = [NSKeyedArchiver archiveRootObject:myArray toFile:filePath];
    

    您可以使用返回数组

    NSArray *savedRequests = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
    

    【讨论】:

      【解决方案3】:

      你可以只保存 NSURLRequest 的 URL 属性的 absoluteString。还是它们各自有不同的超时或缓存策略?

      【讨论】:

        【解决方案4】:

        是的,这是可能的,至少在 Swift 中是这样。使用 Swift,您可以访问 CoreData 中的 Transformable 属性。使用此属性可以将任何类型的数据放入 Core Data。即使没有额外的开销。

        查看优秀教程http://geekyviney.blogspot.nl/2015/02/transformable-binary-data-properties-in.html

        【讨论】:

        • Swift 没有“可转换”属性的概念。 Core Data 有一个。
        猜你喜欢
        • 2021-02-02
        • 1970-01-01
        • 2013-01-05
        • 1970-01-01
        • 2020-05-16
        • 1970-01-01
        • 2016-03-22
        • 2014-10-25
        • 2021-06-03
        相关资源
        最近更新 更多