Сохраните текст, введенный из текстового поля, чтобы использовать его в другом файле [Swift]

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

let configCorreo = ConfigurarCorreo()
let mail = configCorreo.textField.text!

И затем я устанавливаю получателя, используя ту почту, которую пользователь набрал в другом viewController:

let mc: MFMailComposeViewController = MFMailComposeViewController()
mc.mailComposeDelegate = self
mc.setToRecipients(["\(mail)"])

Но я получаю сообщение об ошибке: «фатальная ошибка: неожиданно найден ноль при развертывании необязательного значения»


person Pixele9    schedule 04.11.2015    source источник


Ответы (2)


PrepareForSegue, NSUserDefault и Singleton

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


prepareForSegue: Метод

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

Сначала вы создаете 2 переменные в обоих представлениях: 1 для отправки (currentViewController.swift) и 1 для получения (toViewyourGoingController.swift).

currentViewController.swift var dataToSend: AnyObject?
ViewYourGoingController.swift var dataToReceive: AnyObject?

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    //Check your segue, this way you can transfer different data to different view. also make sure the identifier match your segue.
    if segue.identifier == "toViewYourGoing" {

        //Initial your second view data control
        let ExchangeViewData = segue.destinationViewController as! toViewyourGoingController
        
        //Send your data with segue 
        ExchangeViewData.dataToReceive = dataToSend
    }
}

NSUserDefault

Теперь этот метод хорош, если вы хотите сохранить свои данные, пока приложение установлено, как только приложение будет удалено, оно будет сброшено автоматически. У вас также есть возможность обновить значение ключа, если хотите, вот как вы это делаете NSUserDefault:

Мне всегда нравится регистрировать мой NSUserDeafult по умолчанию, многие люди просто продолжают второй шаг без регистрации.

Зарегистрируйте NSUserDefault в AppDelgate.swift

NSUserDefaults.standardUserDefaults().registerDefaults(["valueName": AnyObject])

Установите значение на свой NSUserDefault, это зависит от того, какой тип данных вы храните, он должен совпадать с типом вашей регистрации, если вы зарегистрировались. (Пример логического типа данных ниже)

NSUserDefaults.standardUserDefaults().setBool(true, forKey: "valueName") //Bool Data Type

Доступные типы:

введите здесь описание изображения

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

NSUserDefaults.standardUserDefaults().synchronize()

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

let Variable: Bool! = NSUserDefaults.standardUserDefaults().boolForKey("valueName")

Синглтон

Теперь singleton — это в основном глобальная переменная, которую вы можете использовать в любых представлениях, но некоторые разработчики сталкиваются с некоторыми ошибками и трудностями, используйте его на свой страх и риск, я рекомендую этот метод, когда вы уверены, что будете часто использовать эти данные ( ВСЕ ЕЩЕ РИСКОВАН), но этот метод похож на богиню обработки данных :).

Создайте подкласс NSObject и назовите его DataManager.swift (я называю его диспетчером данных, потому что он обрабатывает данные) следующим образом:

импортировать UIKit

class DataManager: NSObject {
        
   //Store Data Globally
   static var someData: Boo! //This Boolean, you can choose whatever you want.
}

static — это то, что поддерживает ваши данные.

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

//Store
DataManager.someData = true

//Receive 
print(DataManager.someData)

Проблемы:

Вы также можете использовать

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

Данные "ключ-значение" в iCloud

person Brian Nezhad    schedule 04.11.2015
comment
Я думаю, что собираюсь использовать NSUserDefault, но я немного новичок в быстроте, где мне написать этот код? спасибо чб - person Pixele9; 04.11.2015
comment
Хорошо, когда вы хотите сохранить после действия, метода или когда что-то выполняется. Все зависит от тебя. - person Brian Nezhad; 04.11.2015
comment
Хорошо спасибо! И если я хочу сохранить строку, это будет .setNilValueForKey? - person Pixele9; 04.11.2015
comment
Для строки вы можете использовать setObject, а для ее извлечения вы можете использовать stringForKey - person Brian Nezhad; 04.11.2015
comment
Итак, каково будет значение и forKey, ха-ха, извините за все эти вопросы - person Pixele9; 04.11.2015
comment
Таким образом, значение — это объект/значение, которое вы сохраняете, а forKey — это ключ для его сохранения и извлечения. Это как бы само собой разумеющееся :P - person Brian Nezhad; 04.11.2015
comment
Давайте продолжим обсуждение в чате. - person Pixele9; 04.11.2015

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

Очень просто, посмотрите здесь:

https://www.youtube.com/watch?v=3IDfgATVqHw

person Tom el Safadi    schedule 04.11.2015