iOS Xcode Как сохранить данные с помощью пользовательских объектов, содержащих пользовательские объекты? - PullRequest
0 голосов
/ 11 сентября 2018

Разработчик 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 с помощью SharedPreferences и Gson.toJson(cardDeck).

Спасибо за чтение!

1 Ответ

0 голосов
/ 11 сентября 2018

CoreData - это ORM, построенный на основе SQLLite.Похоже, это может быть излишним для того, что вы хотите.

Вы можете просто объявить свои классы Codable:

class CardDeck: Codable {}

Затем просто используйте JSONEncoder, JSONDecoder для кодирования и декодирования их в объекты данных, которые можно преобразоватьв строку, а затем сохраняется в файле или пользовательских настроек.Любые пользовательские типы в CardDeck также должны быть JSONCodeable.

JSONCodeable - это протокол (т. Е. Интерфейс в терминах Java) и может быть реализован как расширение в существующем классе (не может сделать это в Java, сортироватьможет в C #).

...