iOS Xcode如何使用包含自定义对象的自定义对象持久化数据?

时间:2018-09-11 16:35:50

标签: ios swift core-data nsuserdefaults nscoding

Android开发人员和iOS newb在这里。我有一个要迁移到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)处理了这个问题。

感谢阅读!

1 个答案:

答案 0 :(得分:2)

CoreData是基于SQLLite构建的ORM。听起来这可能对您想要的东西来说是过大的。

您只需声明您的类可编码:

级CardDeck:可编码 { }

然后仅使用JSONEncoder,JSONDecoder将它们编码和解码为Data对象,这些对象可以转换为String,然后存储在文件或用户首选项中。 CardDeck中的所有自定义类型也都必须是JSONCodeable。

JSONCodeable是一种协议(即Java的接口),可以实现为现有类的扩展(在Java中无法实现,在C#中可以)。