【问题标题】:iOS Xcode How to persist data with custom objects containing custom objects?iOS Xcode 如何使用包含自定义对象的自定义对象来持久化数据?
【发布时间】:2018-09-11 16:35:50
【问题描述】:

Android 开发者和 iOS 新手在这里。我有一个要迁移到 iOS 的应用程序。我正在同时学习 Xcode 和 Swift,所以请温柔一点! :)

我的问题是我只是想保存/检索如下类(在 Java 中):

public class CardDeck implements Parcelable{

  private ArrayList<Profile> cards;

  private int location;

  public CardDeck(){
    this.cards = new ArrayList<>();
    this.location = 0;
    //this.numCards = 0;
  }

  public CardDeck(ArrayList<Profile> cards) {
    this.cards = cards;
    this.location = 0;
    //this.numCards = cards.size();
  }

  protected CardDeck(Parcel in) {
    cards = in.createTypedArrayList(Profile.CREATOR);
    //numCards = in.readInt();
    location = in.readInt();
  }
}

我想保存/检索包含配置文件数组的 CardDeck 对象。我最初的阅读使我认为您不能使用 UserDefaults 或 NSCoding 执行此操作,因为 plist 文件不能包含自定义数据类型,例如 Profile。我做对了吗? UserDefaults 用于标准数据类型(bool、int、String 等),NSCoding 可以处理自定义对象,例如 CardDeck 但 CardDeck 只能具有标准数据类型的成员。

专业人士会如何处理我的问题?核心数据?

我在 Android 中使用 SharedPreferencesGson.toJson(cardDeck) 处理了这个问题。

感谢阅读!

【问题讨论】:

    标签: ios swift core-data nsuserdefaults nscoding


    【解决方案1】:

    CoreData 是一个建立在 SQLLite 之上的 ORM。听起来它可能对你想要的东西有点过分了。

    你可以只声明你的类 Codable:

    class CardDeck : 可编码 { }

    然后只需使用 JSONEncoder、JSONDecoder 将它们编码和解码为 Data 对象,这些对象可以转换为 String,然后存储在文件或用户首选项中。 CardDeck 中的任何自定义类型也需要 JSONCodeable。

    JSONCodeable 是一种协议(即 Java 术语中的接口),可以作为现有类的扩展来实现(在 Java 中不能这样做,在 C# 中可以)。

    【讨论】:

    • 谢谢安德鲁!我将研究 JSONCodable。听起来正是我需要的。非常感谢。再次感谢。在 cocoapods 上找到它。
    • 哦!我现在看到您不必使用 Pod。您可以使用 JSONEncoder/decoder 是 Swift 4 中 Codable 接口的一部分。
    • 是的,没错。 JSONCodable 是 Swift 4 的一个特性。
    猜你喜欢
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 2022-11-23
    • 2015-04-02
    相关资源
    最近更新 更多