Я пытаюсь сохранить свой ответ json от входа пользователя в Core Data, чтобы, когда пользователь выйдет из приложения и снова откроется, он распознал этого конкретного пользователя. У меня есть только простой json, который имеет тип [String: Any, …. String: Any], теперь я сохранил ответ, создав модель структуры, как показано ниже. Может ли кто-нибудь узнать лучший способ достичь того, чего я хочу, пожалуйста Помогите мне, я новичок в Core Data, я не знаю, с чего начать
print(loginData)
печатает правильную информацию? — person Ulugbek schedule 08.03.2021
да, он напечатает логин json — person Ulugbek schedule 08.03.2021
Почтовый индекс в виде текста, а не изображений — person Ulugbek schedule 08.03.2021
Вам следует начать с выполнения некоторых руководств и чтения некоторых статей по Core Data, поскольку stackoverflow не является учебным сайтом, поэтому этот вопрос слишком широкий и должен быть закрыт. — person Ulugbek schedule 08.03.2021
да, я читал яблочный документ, и их пример использования CoreData был трудным для понимания концепции, поэтому я поискал в сети полезных руководств, но безуспешно, и последний вариант — запросить stackoverflow, — person Ulugbek schedule 08.03.2021
Нет, stackoverflow не является «последним вариантом» при проведении исследований и / или обучения. Кроме того, если все, что вы хотите достичь, это распознать пользователя, который вошел в систему, я уверен, что UserDefaults будет достаточно. — person Ulugbek schedule 08.03.2021
Сначала объявите свой основной контейнер данных
Здесь
container_name
будет вашим именем файла основных данных.Затем эта функция выполнит сохранение:
Для запроса ваших данных:
Это простой ответ на ваш вопрос, который направит вас в нужном направлении. Обратитесь к документации CoreData и некоторым другим руководствам, чтобы лучше понять. Также не забудьте обработать все ошибки, которые могут возникнуть в результате выполнения вышеуказанных шагов. Я не рассматривал каждый сценарий, в котором может произойти ошибка.
спасибо за вашу помощь, но для запроса он не работает, поскольку LoginData является протоколом Decodable, он говорит, что выдает ошибку, и я не могу создать новый экземпляр LoginData, когда я его запрашиваю, есть ли способ? — person Ulugbek; 08.03.2021
Я обновил ответ.
var loginData: LoginData = LoginData()
. Не могли бы вы показать ошибку, пожалуйста — person Ulugbek; 08.03.2021он говорит, что отсутствует аргумент для параметра ‘from’ в вызове в
var loginData: LoginData = LoginData()
, я должен передать параметр LoginData () некоторому декодеру, это ошибка — person Ulugbek; 08.03.2021Проверьте, правильно ли поступают значения из запроса, используя только
print(loginDataObject.value(forKey: "accountId") as! String)
без создания loginData. — person Ulugbek; 08.03.2021chat.stackoverflow.com/rooms/229646/ заходите в чат — person Ulugbek; 08.03.2021
Основы
Создайте свой проект Swift на XCode и проверьте
Use CoreData
Обязательно используйте
import CoreData
в заголовке вашего классаСохранение в CoreData
Если в вашем проекте используется CoreData, вы можете выполнить функцию сохранения, указанную ниже:
С другой стороны, если ваш проект не использует CoreData, вы можете объявить контейнер CoreData под названием CoreData Stack (он автоматически включается в проект, который использует CoreData в AppDelegate). Вы можете поместить его в класс ViewController там, где он вам нужен, или добавить в расширение UIViewController для глобального использования:
Использовать:
ОБНОВЛЕНИЕ: дополнительные ответы
Если вы хотите использовать этот loginToken или ЛЮБЫЕ данные из LoginData, мы можем получить значения, которые мы сохранили из CoreData ранее.
Для эффективного получения значений лучше всего сначала сохранить LoginToken текущего пользователя. Для облегчения доступа я предлагаю вам сохранить его в
UserDefaults
при ВХОДЕ и просто удалить его при выходе.Пример использования:
Чтобы получить currentLoginToken:
Получение определенных данных
Я создал функцию, которую мы можем использовать для получения ЛЮБОЙ информации, которую мы сохранили ранее:
Теперь, например, если вы хотите получить ReturnCode текущего пользователя:
Для использования (в ситуации, описанной в комментарии):
Заявление об ограничении ответственности: я не тестировал приведенные выше коды. Если вы столкнетесь с какой-либо ошибкой, просто дайте мне знать в комментариях.
Изменить: обновлено
fetchReq
и замененоfilterReq
вgetAnyValueFromCoreData()
(самодельные функции)спасибо, все сработало, но позже, если я захочу использовать эти loginTokens или какие-либо данные из LoginData, как я могу их получить? например, в другом vc, если returnCode == 0, показать пользователю главную страницу. — person Ulugbek; 08.03.2021
Я обновил свой ответ, чтобы ответить на ваши дополнительные вопросы. пожалуйста, дайте мне знать, работает ли это — person Ulugbek; 08.03.2021
Я думаю, что это какая-то ошибка, я поискал в Интернете, но не нашел решения, там написано
Cannot find 'fetchEntity' in scope
иCannot find 'filterReq' in scope
вgetAnydatafromCoredata()
методе — person Ulugbek; 09.03.2021@Ulugbek, извините, это были самодельные функции, которые я забыл включить. Обновлю свой ответ — person Ulugbek; 09.03.2021
Да, не беспокойтесь, я так благодарен за вашу помощь. Теперь, глядя на код, и я понимаю поток, я с нетерпением жду вашего обновления, — person Ulugbek; 09.03.2021
@ Улугбек, я отредактировал свой ответ, пожалуйста, дайте мне знать, как все прошло — person Ulugbek; 09.03.2021
@Ulugbek, если какой-либо из ответов решил ваш вопрос, отметьте его как ответ. Спасибо — person Ulugbek; 10.03.2021
Я пометил его как полезный, НЕТ? — person Ulugbek; 10.03.2021