Ios — Swift 3 Сохранение данных


IOS Swift 3 — Как сохранить данные, которые можно перенести на любой View Controller

Я делаю игру, в которой есть навыки, у каждого из которых есть свой уровень и опыт, в зависимости от того, насколько их игрок обучил их. Здесь также есть такие вещи, как деньги и вещи, хранящиеся в банке.

Мне нужно знать, где я должен сохранить эти элементы, чтобы вы могли получить к ним доступ из любого контроллера представления и чтобы он сохранялся при закрытии и открытии игры.

У меня все еще есть проблемы, пытаясь заставить это работать.

Я решил попробовать и использовать UserDefualts, но я не уверен, что я делаю неправильно.

Может ли кто-нибудь объяснить, хотел ли я иметь переменную под названием монеты и иметь метку, которая отображала бы эти монеты, начиная с 0, и каждый раз, когда нажимали кнопку, монеты увеличивались на 1. Затем также можно закрыть представление игры или ведьмы и получить монеты остаются такими же, как до закрытия?

Ваш вопрос является распространенным. Но в случае, если у вас есть описание, я мог бы поделиться несколькими способами, которые могут помочь вам решить проблему.

Во-первых, вы должны определить, являются ли данные игры конфиденциальными?

Если он не чувствителен, попробуйте использовать NSUserDefaults это быстрый способ предоставить примитивное хранилище для данных, которые вы описали.

Если нет, и данные должны быть защищены, попробуйте использовать более сложные способы, такие как CoreData и Realm . У них есть множество защитных оболочек, которые не дадут столь простой способ управлять сохраненными данными.

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

Swift 3 — сохранение изображений в Core Data

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

Я получаю свои данные из API-вызова на мой сервер. Возвращает строку base64. Вот где я получаю данные:

Здесь я сохраняю это в моей БД:

затем, чтобы получить это:

Полный журнал ошибок:

Надеюсь, кто-то может помочь. Заранее спасибо!

ОБНОВЛЕНО

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

3 ответа

Base64 — это способ конвертировать данные в строку. Нет причин использовать его здесь. У вас уже есть данные из базы данных, которые вы просто хотите преобразовать в UIImage.


base64EncodedData превращает данные из данных изображения в кодированную строку utf-8 на основе 64 кода. Для этого нет причин.

Вы должны получить строку с кодировкой base64 с сервера, преобразовать ее в данные, и тогда вам больше никогда не понадобится base64. Читайте и записывайте данные в свою базу данных, а после чтения преобразуйте их в UIImage. Base64 — это метод кодирования для передачи данных. Если вы не разговариваете с сервером, нет причин использовать base64.

Swift 3 — Сохранение изображений в основные данные — ios

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

Я получаю свои данные от вызова api на моем сервере. Он возвращает строку base64. Вот где я получаю данные:

Здесь я сохраняю его в своей БД:

затем забрать его:

Полный журнал ошибок:

Надеюсь, кто-то может помочь. Заранее спасибо!

ОБНОВЛЕНО

Поэтому я удалил приложение, а затем обработанный выше код. Однако картины выходят синим цветом? (да, я проверил, что изображения, отправленные из базы данных, верны).

    3 2
  • 19 окт 2020 2020-10-19 19:38:08
  • Steffen L.

2 ответа

После предложенных исправлений от Джона Роуза все, что мне было нужно, это добавить

где я показывал свою фотографию, и код работал.

  • 19 окт 2020 2020-10-19 19:38:10
  • Steffen L.

Base64 — это способ преобразования данных в строку. Здесь нет причин использовать его. У вас уже есть данные из базы данных, которую вы просто хотите преобразовать в UIImage.

base64EncodedData превращает данные из данных изображения в кодировку, кодируемую utf-8, с кодировкой 64 кодировки. Для этого нет оснований.

Вы должны получить кодировку base64 с сервера, преобразовать ее в данные, а затем вам больше не понадобится base64. Прочитайте и запишите данные в свою базу данных, и после того, как вы прочитаете, переведите его в UIImage. Base64 — метод кодирования для передачи данных. Если вы не разговариваете с сервером, нет оснований использовать base64.

iOS Swift 3 — Как сохранить данные, которые можно потянуть на любой контроллер просмотра

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

Мне нужно знать, где я должен сохранять эти элементы, чтобы вы могли получить к нему доступ с любого контроллера вида и чтобы он сохранялся при закрытии и открытии игры.

Я до сих пор есть проблемы, пытаясь сделать эту работу.

Я решил попробовать использовать UserDefualts, но я не уверен, что я делаю неправильно.

Может ли кто-нибудь объяснить, хочу ли я иметь переменную, называемую монетами, и иметь ярлык, который отображает эти монеты, начиная с 0 и каждый раз, когда нажимается кнопка, монеты поднимаются на 1. Затем также можно закрыть игру или ведьмы и монеты остаются такими же, как и до закрытия?

Создан 23 апр. 17 2020-04-23 18:27:02 Jacob Peterson

Определенно посмотрите на ссылку Назмула. У вас есть несколько вариантов. NSUserDefaults — хороший вариант, если данных не так много. Каталог документов пользователя доступен, если вы хотите хранить много информации. – Mozahler 23 апр. 17 2020-04-23 18:49:36

‘использовать NSuserdefaults’ . NO. – J. Doe 23 апр. 17 2020-04-23 21:14:45

Предлагая использовать NSUserDefaults для чего угодно, кроме пользовательских, выбираемых пользователем опций способствует злоупотреблению функцией – dbn 27 апр. 17 2020-04-27 00:28:34

2 ответа

Вопрос вы распространены. Но в случае, если вы описали, я мог бы поделиться несколькими способами, которые помогут вам решить проблему.

Во-первых, вы должны определить, чувствительны ли игровые данные?

Если он не чувствителен, попробуйте использовать NSUserDefaults , это быстрый способ предоставить примитивное хранилище для данных, которые вы описали.

Если нет и данные должны быть защищены, попробуйте использовать более сложные способы, такие как CoreData и Realm . У них есть множество оболочек безопасности, которые не позволят легко управлять сохраненными данными.

Но вы также можете использовать классную функцию, такую ​​как iCloud , эта опция даст вам возможность хранить и синхронизировать игровые данные между платформами и быть достаточно безопасным.

Создан 23 апр. 17 2020-04-23 19:00:05 Oleg Gordiichuk

Хороший ответ! Также может быть хорошей идеей убедиться, что он знает о шаблоне MVC. Помимо хранения, он также беспокоится о совместном использовании данных между VC, которые MVC прекрасно решает ;-)Paulo Mattos 23 апр. 17 2020-04-23 20:02:12


Вы можете создать синглтон и сохранить свои данные там.

Чтобы получить доступ к нему из любого другого класса:

Вы бы, конечно, хранить данные в базе данных, но одноточечно дает вам удобный доступ.

Создан 23 апр. 17 2020-04-23 20:27:47 Adam Eri

Как сохранить локальные данные в приложении Swift?

В настоящее время я работаю над iOS-приложением, разработанным в Swift, и мне нужно сохранить какой-то пользовательский контент на устройстве, но я не могу найти простой и быстрый способ хранения/получения содержимого пользователей на устройство.

Может ли кто-нибудь объяснить, как хранить и получать доступ к локальному хранилищу?

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

9 ответов

Самым простым решением, если вы просто храните две строки, является NSUserDefaults , в Swift 3 этот класс был переименован в просто UserDefaults .

Лучше всего хранить свои ключи где-нибудь на глобальном уровне, чтобы вы могли использовать их в другом месте своего кода.

Swift 2.0

Swift 3.0 и 4.0

Для чего-либо более серьезного, чем второстепенные конфигурации, флаги или базовые строки, вы должны использовать какое-то постоянное хранилище. На данный момент популярным вариантом является Realm, но вы также можете использовать SQLite или Apple, имеющие собственные CoreData.

Они говорят, что используют NSUserDefaults

Когда я впервые внедрил долгосрочное (после закрытия приложения) хранилище данных, все, что я читал в Интернете, указывало на NSUserDefaults. Тем не менее, я хотел сохранить словарь, и, хотя это было возможно, это было болезненно. Я часами пытался заставить ошибки типа исчезнуть.

NSUserDefaults также ограничен в функции

Дальнейшее чтение показало, как чтение/запись NSUserDefaults действительно заставляет приложение читать/записывать все или ничего, все сразу, так что это не эффективно. Затем я узнал, что получение массива не так просто. Я понял, что если вы храните более нескольких строк или логических значений, NSUserDefaults на самом деле не идеален.

Это также не масштабируется. Если вы учитесь программировать, изучите масштабируемый способ. Используйте только NSUserDefaults для хранения простых строк или логических значений, связанных с настройками. Хранить массивы и другие данные с помощью Core Data, это не так сложно, как говорится. Просто начните с малого.

Обновление: также, если вы добавите поддержку Apple Watch, есть еще один потенциальный фактор. Ваше приложение NSUserDefaults теперь автоматически отправляется на расширение Watch.

Использование основных данных

Поэтому я проигнорировал предупреждения о том, что Core Data является более сложным решением, и начал читать. Через три часа у меня все заработало. У меня был массив таблиц, сохраненный в Core Data и перезагружающий данные при открытии приложения! Код учебника был достаточно прост в адаптации, и я смог сохранить в нем как заголовки, так и подробные массивы, лишь немного поэкспериментировав.


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

Вот учебник, который я прочитал:

Если вы не отметили «Основные данные»

Если вы не отметили «Базовые данные» при создании приложения, вы можете добавить его позже, и это займет всего пять минут:

Как удалить из основных списков данных

Как использовать UISwitch для сохранения настроек

Этот учебник был обновлен для XCODE 7.3 & Swift 2.2

Первая позволяет настроить X Код проекта, как обычно,. Создать новый сингл вид приложения X Код проекта. Установите следующие значения и сохранить его на рабочем столе.

Перейти на главную раскадровки и выберите View Controller. Установите его размер iPhone 4-дюймовый в секции атрибутов.

Добавить метку & перейти к главному раскадровки

Изменить ярлыки текст «Белый фон»

Подключите выключатель по выходу Свифт файла

Подключите переключатель как действие Свифт файла

Добавить следующий код в вид сделал нагрузки. Это позволит установить начальное значение для переключателя

Добавить следующий код в распределительных изменилось кнопки

Теперь построить и запустить приложение в iPhone 5S. Включите выключатель & выключите.

Вызов Сохранить переключения состояния с NSUserDefaults

(Намек: сохранить логическое значение с NSUserDefaults)

Uber вызов Сохранить цвет фона с NSUserDefaults

Как сохранить локальные данные в приложении Swift?

В настоящее время я работаю над iOS-приложением, разработанным в Swift, и мне нужно сохранить какой-то пользовательский контент на устройстве, но я не могу найти простой и быстрый способ хранения/получения содержимого пользователей на устройство.

Может ли кто-нибудь объяснить, как хранить и получать доступ к локальному хранилищу?


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

9 ответов

Самым простым решением, если вы просто храните две строки, является NSUserDefaults , в Swift 3 этот класс был переименован в просто UserDefaults .

Лучше всего хранить свои ключи где-нибудь на глобальном уровне, чтобы вы могли использовать их в другом месте своего кода.

Swift 2.0

Swift 3.0 и 4.0

Для чего-либо более серьезного, чем второстепенные конфигурации, флаги или базовые строки, вы должны использовать какое-то постоянное хранилище. На данный момент популярным вариантом является Realm, но вы также можете использовать SQLite или Apple, имеющие собственные CoreData.

Они говорят, что используют NSUserDefaults

Когда я впервые внедрил долгосрочное (после закрытия приложения) хранилище данных, все, что я читал в Интернете, указывало на NSUserDefaults. Тем не менее, я хотел сохранить словарь, и, хотя это было возможно, это было болезненно. Я часами пытался заставить ошибки типа исчезнуть.

NSUserDefaults также ограничен в функции

Дальнейшее чтение показало, как чтение/запись NSUserDefaults действительно заставляет приложение читать/записывать все или ничего, все сразу, так что это не эффективно. Затем я узнал, что получение массива не так просто. Я понял, что если вы храните более нескольких строк или логических значений, NSUserDefaults на самом деле не идеален.

Это также не масштабируется. Если вы учитесь программировать, изучите масштабируемый способ. Используйте только NSUserDefaults для хранения простых строк или логических значений, связанных с настройками. Хранить массивы и другие данные с помощью Core Data, это не так сложно, как говорится. Просто начните с малого.

Обновление: также, если вы добавите поддержку Apple Watch, есть еще один потенциальный фактор. Ваше приложение NSUserDefaults теперь автоматически отправляется на расширение Watch.

Использование основных данных

Поэтому я проигнорировал предупреждения о том, что Core Data является более сложным решением, и начал читать. Через три часа у меня все заработало. У меня был массив таблиц, сохраненный в Core Data и перезагружающий данные при открытии приложения! Код учебника был достаточно прост в адаптации, и я смог сохранить в нем как заголовки, так и подробные массивы, лишь немного поэкспериментировав.

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

Вот учебник, который я прочитал:

Если вы не отметили «Основные данные»

Если вы не отметили «Базовые данные» при создании приложения, вы можете добавить его позже, и это займет всего пять минут:

Как удалить из основных списков данных

Разработка Как программировать под Swift. Делаем первое приложение

Итак, продолжим знакомство с простым и интересным языком Swift. В прошлый раз мы познали базовые команды и функции перспективного языка программирования. А теперь сделаем своё первое приложение!


Как создать приложение для iOS

Сегодня мы сделаем простое приложение для расчета индекса массы тела и необходимого количества калорий для поддержания веса. Для этого будем использовать формулы Гарисса Бенедикта и индекса массы тела.

1. Для начала давайте создадим проект: запустите Xcode и нажмите комбинацию клавиш CMD+Shift+N или выберите в меню File->New->Project

2. Теперь выберите Tabbed Application и нажмите Next.

3. На этом этапе надо придумать имя для приложения (Product Name), нажать Next и выбрать папку для сохранения. Параметры Organization Name и Organization Identifier можете не менять.

Главное, чтобы значение в поле Language было равно Swift.

4. После того, как вы сохраните проект, перед вами появится рабочее пространство Xcode.

Слева у вас будет панель Navigator, а справа — Utilities. В каждой из этих панелей есть свои вкладки, которые позволяют получить доступ к различным функциям.

Например, первая влкадка в панеле Navigator показывает список файлов проекта, третья позволяет производить поиск по проекту и так далее.

5. Найдите в списке файлов проектов файл с именем Main.storyboard и нажмите на него.

Файл Main.storyboad определяет, какие экраны (контроллеры) есть в приложении. Вы можете добавлять элементы на экраны, задавать связи между экранами и так далее.

Если вы выберите какой-нибудь контроллер, он подсветится синей рамкой:

После того, как контроллер выбран, его свойства начнут отображаться в панели Utilities. Например, контроллеру можно поменять размер, выбрав другое значение в поле Size.

6. Запустим наше шаблонное приложение и посмотрим, как оно выглядит в симуляторе. Для этого надо в верхнем левом углу выбрать тип симулируемого устройства и нажать комбинацию клавиш CMD+R или кнопку с икокой Play.

Как видите, у нас есть приложение с двумя экранами, преключение между которым осуществляется при помощи таб-бара.

7. Нужно переименовать название табов. Для того, чтобы это сделать, надо выбрать таб, кликнув на него или выбрав его в иерархии элементов управления.

После того как таб будет выбран, он подсветится зеленым цветом.

8. Теперь в панели Utilities выбирайте Attributes Inspector и меняйте значение в поле Title на BMR/BMI для первого таба и Килокалории для второго.

Сейчас на первом контролере размещены всякие надписи. Их надо удалить. Для этого выделите их и нажмите Delete.

9. Теперь добавим свои элементы управления. Внизу панели Utilities есть Object Library, в которой можно выбрать объекты и добавить их к сцене. Найдите объект Label и перетащите его на контроллер BMR/BMI. Перед этим не забудьте два раза тапнуть на сцене, чтобы масштаб стал стандартным.

Должно получиться примерно так.

В панели Utilities можно поменять текст, размер шрифта и так далее.

10. Перетащите еще несколько лейблов и поставьте им такой же текст, как и на картинке. Для последнего лейбла нужно поставить Lines в 2, чтобы текст переносился на другую строку.


11. Теперь добавьте 3 текстовых поля (Text Field).

И разместите их, как на картинке.

У текстовых полей поставьте параметр keyboard type в Number Pad.

И установите текст по умолчанию.

12. Теперь добавим элементы управления для выбора пола и кол-ва тренировок в неделю. В Object Library ищете Segmented Control и добавляйте на экран.

У Segmented Control можно менять количество сегментов и текст для каждого сегмента.

Сделайте так, чтобы сегменты выглядели, как на скриншоте.

13. Теперь добавьте кнопку (button).

И установите ей заголовок.


После этого добавьте еще один label с lines равным 4.

14. Выберите контроллер BMI/BMR, нажмите два пересекающихся кольца в правом верхнем углу и откроется Assistant Editor. Он показывает код, ассоцированный с этим контроллером.

15. Протащим элементы управления.

Для этого выберите первый text field (в нашем случае это будет возраст), нажмите Ctrl, кликните на него еще раз и, не отпуская кнопки, перетащите внутрь класса. Если все сделано правильно, то вы увидите посказку “Insert Outlet, Action, …”.

Теперь отпустите курсор, и вы увидете окошко для создания связи. В качестве имени введите ageTextField и нажмите Connect.

16. У вас появится переменная ageTextField.

Проделайте эту процедуру для оставшихся text field, segmented controls и label с текстовым результатом. У вас должно получиться так:

Теперь протащите кнопку, но тип соединения укажите не Outlet, а Action. И в качестве имени используйте calculateTapped.

17. Теперь скопируйте следующий код в метод calculateTapped.

Этот код выполняет расчет и выводит результат на экран.

18. Пришло время подвести итог. Давайте запустим и проверим:

Ваша первая программа готова! Молодцы!

Задавайте вопросы


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

Над текстом трудился Руслан Гуменный — ведущий разработчик e-Legion. Компания является лидером на рынке заказной мобильной разработки в Европе, входит в состав холдинга DZ Systems. За 9 лет существования были созданы приложения для РайффайзенБанка, Яндекса, BMW, Банка Москвы, Первого Канала, Aviasales, Sports.ru, ВГТРК, Mail.Ru Group и многих других компаний.

Если вы шарите в теме и вам есть, что добавить, не стесняйтесь – пишите в редакцию со своими статьями на тему разработки приложений. В следующем выпуске подробнее рассмотрим, что было сделано и доработаем приложение, подготовив его к публикации. Так что подготовьтесь заранее, сделав домашнее задание :)

Уверен, все остальные давно мечтали «сделать свое приложение для айфона». Это ваш шанс. До скорых встреч в следующих статьях цикла!

(4.00 из 5, оценили: 1)

Swift 3 Как сохранить и загрузить данные

Я студент разработки программного обеспечения и для школьного проекта я и мой друг делают игру IOS Swift, и мы учимся Свифта 3, как мы продвигаемся в игре аспектах.

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

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

Я сделал некоторые исследования по этому вопросу и обнаружили , что существуют различные методы , которые мы могли бы использовать. Как мы могли бы использовать Core Data или словарь или файл в формате JSON.

Я хотел бы знать, какой может быть лучшим / простым способом acomplish это, если нам нужно использовать какие-либо специальные библиотеки и основной код, как писать / читать данные

Лучший способ сохранить оценки заключается в использовании NSUserDefaults Чтобы сохранить настройки , такие как громкость, вы можете следовать моделям у меня ниже.

Если вы сохраняете игрок денег, имя и все эти другие вещи, было бы лучше, чтобы сохранить их в каком-то базе данных. Я не уверен, если вы можете сделать это с помощью GameCenter.

Самый простой способ для сохранения данных вы работаете с на устройстве будет использовать NSUserDefaults . Все , что вам нужно сделать , это создать key и хранить в value соответствии с этим key . Затем вы можете использовать key для доступа к значению позже , и она хранится на постоянной памяти телефона.

Например, можно использовать параметры по умолчанию пользователя для создания ключа под названием «цвет глаз», сохранить значение по этому ключу, а затем получить доступ к нему позже, используя термин, который вы знаете значение хранятся под (то есть ключ). Это очень простой способ хранения такой информации.

iOS Swift 3 – Как сохранить данные, которые можно вытащить на любой контроллер View

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

Мне нужно знать, где я должен сохранять эти элементы, чтобы вы могли получить доступ к нему с любого контроллера представления и чтобы он сохранялся при закрытии и открытии игры.

У меня все еще есть проблемы с попыткой сделать эту работу.

Я решил попробовать использовать UserDefualts, но я не уверен, что я делаю неправильно.

Может кто-нибудь объяснить, хочу ли я иметь переменную, называемую монетами, и иметь ярлык, который отображает эти монеты, начиная с 0, и каждый раз, когда нажимается кнопка, монеты поднимаются на 1. Затем также можно закрыть игру или колдунья и монеты остаются такими же, как и до закрытия?

Вы вопрос общий. Но в случае, если вы описали, я мог бы поделиться несколькими способами, которые помогут вам решить проблему.

Во-первых, вы должны определить, чувствительны ли игровые данные?

Если это не чувствительно, попробуйте использовать NSUserDefaults это быстрый способ предоставить примитивное хранилище для данных, которые вы описали.

Если нет, и данные должны быть защищены, попробуйте использовать более сложные способы, такие как CoreData и Realm . У них есть множество оболочек безопасности, которые не позволят легко управлять сохраненными данными.

Но вы также можете использовать классную функцию, такую ​​как iCloud эта опция даст вам возможность хранить и синхронизировать игровые данные между платформами и быть достаточно безопасным.

Вы можете создать синглтон и хранить там свои данные.

Чтобы получить доступ к нему из любого другого класса:

Конечно, вы сохранили данные в базе данных, но синглтон предоставит вам удобный доступ.

Цукерберг рекомендует:  Очень красивое меню для сайта
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих