Должен ли я использовать NSUserDefault, словари, основные данные - или что-то еще? - PullRequest
0 голосов
/ 18 октября 2018

У меня возникли некоторые проблемы с приложением, которое я создаю, и я подумал, что это будет проще объяснить некоторыми фотографиями, так что ...:

Конечно, «Создать нового человека-кнопку» в Nr.1 приводит вас ко второму номеру.

Теперь у меня возникают проблемы с выяснением, как сохранить эти данные о человеке в «Дневнике людей».Цель состоит в том, чтобы, когда вы вводите имя человека, добавляете фотографию (функция включения камеры, с которой я буду бороться позже ...) и добавляете ответ на вопрос - тогда вам нужно только нажать «Сохранитьэтот человек ", и затем вы будете перенаправлены на AllPersonsInYourDiaryViewController, где теперь есть новый tableViewCell с именем этого нового человека (возможно, с подзаголовком, содержащим ответ и фотографию, также отображаемую в миниатюре в ячейке).

(Естественно, вы можете затем ввести эту ячейку вместе с данными о человеке - но это будет дальше.)

До сих пор в приложении я использовал NSUserDefault, когда позволял пользователю создавать этот конкретный дневник.по имени "Дневник Антонса" со специфическим вопросом и так далее.Но теперь до меня дошло, что, может быть, разумнее использовать что-то еще?Я пытался со словарями, но не мог заставить это работать должным образом.

Итак ...: Прежде чем я часами играю одним из этих способов, кто-нибудь умнее меня, скажи мне, какой будет лучший подход?

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Если я могу дать свои два цента, первое, что вам нужно сделать, это «спроектировать», как представлять человека программно.Вы можете создать структуру или класс для этого, даже если структура более подходит:

struct Person {
    var name: String?
    var answer: String?
    var photo: String?
}

Затем вы можете решить, как сохранить данные такого объекта постоянно.Если вы хотите использовать базу данных, я бы порекомендовал использовать SQLite с библиотекой FMDB .Это действительно легко и быстро научиться использовать его, и это также очень удобно.Я использовал это большие проекты, и это работает гладко.Я нахожу CoreData слишком сложным и излишним в зависимости от того, что вам нужно.

Если вы не хотите использовать базу данных, ваш единственный другой способ - сохранить в файлы, но все же, у вас есть варианты здесьтоже.Если вы кодируете (см. Codable protocol в Swift), вы можете использовать NSKeyedArchiver для преобразования в объект Data и записи затем на диск.Если вам нравится использовать словари, и поскольку у человека не будет слишком много свойств, вы можете создать словарь, назначив свойства и их значения, а затем преобразовать и сохранить как данные JSON, илидаже файлы Plist.Без какого-либо намерения продвигать здесь, но просто для того, чтобы оказать некоторую дополнительную помощь, если вы хотите , посмотрите библиотеку , которую я написал и которая может сделать все это автоматически для вас.Это протокол, который вы должны принять, а затем вы можете мгновенно преобразовать свою структуру в словарь, JSON или plist и сохранить в файлы.

Независимо от того, какой путь вы собираетесь выбрать, сохраните изображения какОтдельные файлы в папку с документами, а их имена хранятся только в базе данных / файле.Основываясь на них, вы можете легко построить путь к каждому изображению (или URL) при необходимости. Предупреждение: не сохраняйте полный путь к каталогу документов, особенно если вы тестируете на симуляторе;пути меняются в каждой сборке.Сохраните только имя файла.

Кроме того, если вы собираетесь использовать структуру, подобную приведенной выше, вы можете реализовать небольшие, но очень удобные функции, которые будут отвечать за сохранение, загрузку илиобновление ваших данных до решения (база данных / файл), которое вы в конечном итоге выберете.Таким образом, вы будете иметь связанные вещи, собранные в одном месте, и легко доступные (например, person.save ()).

struct Person {
    var name: String?
    var answer: String?
    var photo: String?

    func save() {
        …
    }

    func load() {
        …
    }

    // More functions…
}

Наконец, избегайте использования UserDefaults или, по крайней мере, оставьте только несколькокритических данных нет.UserDefaults не предназначены для хранения всех данных, созданных вашим приложением.Самое главное, не используйте его для сохранения конфиденциальных данных, особенно паролей и тому подобного.

Надеюсь, вышесказанное поможет вам принять решение.

0 голосов
/ 18 октября 2018

Я могу дать вам логику, лежащую в основе coreData и NSUserDefaults, но вы решите, какой из них следует использовать.

CoreData обычно используется в качестве базы данных.Вы можете создавать объекты и атрибуты для каждого объекта.Более того, вы можете создавать отношения между этими объектами.При извлечении данных из coreData вы можете упорядочить эти данные с помощью NSSortDescriptor или выбрать конкретную запись с помощью NSPredicate.Как вы можете видеть, CoreData - это база данных.

Хотя NSUserDefaults обычно используется для сохранения пароля, имени пользователя, идентификатора пользователя ... и других проблем, которые вы будете регулярно использовать в приложении.NSUserDefaults дает вам прямой доступ к сохраненным переменным в любое время.Однако для доступа к сущности и выполнения запроса CoreData потребуется больше времени и строк кода.

Теперь проверьте, какой метод больше подходит для вашего случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...