【问题标题】:Storing complete class object into database in iPhone将完整的类对象存储到 iPhone 的数据库中
【发布时间】:2012-03-08 10:04:13
【问题描述】:

我是这个开发的新手。

我想将一个类的完整对象存储到我的数据库中。 实际上,我正在创建应用程序,用户可以在其中向父视图添加多个视图并希望保存它,以便下次用户获取它时,他将获得他保存的内容,即先前对父视图的视图。

任何关于相同的逻辑或建议都会很有帮助,

提前致谢

【问题讨论】:

    标签: iphone ios database class object


    【解决方案1】:

    您要保存的任何对象都需要符合 NSCoder 协议。请记住,如果您的父对象中有自定义对象,它们将需要符合 NSCoder。将以下方法添加到您的自定义类中。

    - (id)initWithCoder:(NSCoder *)coder {
      _inventory = [[coder decodeObjectForKey:@"inventory"] retain];
    
      return self;
    }
    
    - (void)encodeWithCoder:(NSCoder *) encoder{
      [encoder encodeObject:_inventory forKey:@"inventory"];
    } 
    

    在上面的示例中,我想对玩家的库存进行编码。如果清单包含自定义对象(例如,与一堆 NSString 相对),它们还需要自己的 NSCoder 方法。

    下面我把它变成你可以保存到 NSUserDefaults 的东西。适当调整以存储在数据库中。请记住,如果您想通过网络发送 NSData 以存储在数据库中,您需要将其转换为 Base64 并可能对其进行压缩。

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSData * encodedObject = [NSKeyedArchiver archivedDataWithRootObject:rootObject];
    
    [defaults setObject:encodedObject forKey:kSaveArchiveKey];
    [defaults synchronize];
    

    另一方面,您需要获取您的 NSData,对它执行我上面描述的任何魔法(base64、压缩)并取消归档。

    PlayerInventory *inventory = [NSKeyedUnarchiver unarchiveObjectWithData:playerInventoryData]
    

    【讨论】:

      【解决方案2】:

      您应该根据您的具体需求在 NSCoding 和 Core Data 之间进行选择。有关更多信息,请参阅此帖子:NSCoding VS Core data

      【讨论】:

      • 感谢您的回答,您能否提供一个示例代码,说明我如何实际存储它们。
      • @Prateek,Apple 提供了大量的示例代码。去开发者中心看看。
      【解决方案3】:

      您可以在数据库中存储任何对象的状态(任何属性的值)。你应该使用 NSCoding.Example here

      【讨论】:

      • 感谢您的回答,您能否提供一个示例代码,说明我实际上如何使用 NSCoding 存储类对象
      猜你喜欢
      • 2015-10-28
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 2018-06-15
      相关资源
      最近更新 更多