如何使我在 UIAlertController 内的 UITextField 中输入的数据通过 Swift 中的重置持续存在?

Posted

技术标签:

【中文标题】如何使我在 UIAlertController 内的 UITextField 中输入的数据通过 Swift 中的重置持续存在?【英文标题】:How to make data I enter in a UITextField inside a UIAlertController persist through resets in Swift? 【发布时间】:2015-04-25 16:58:20 【问题描述】:

我一直在尝试在我的浏览器应用程序中集成 Pinboard 书签视图(通过解析 RSS 提要并将其显示在 TableView 中)。要获取提要的用户名和 API 令牌,我在我的应用程序的设置视图中有一个 UIAlertController。输入的详细信息会通过会话保留,但如果我从多任务视图中强制退出应用程序,则会删除详细信息。我怎样才能让他们留下来?

这是我用于 UIAlertController 的代码:

@IBAction func pinboardUserDetailsRequestAlert(sender: AnyObject) 
    //Create the AlertController
    var pinboardUsernameField :UITextField?
    var pinboardAPITokenField :UITextField?
    let pinboardUserDetailsSheetController: UIAlertController = UIAlertController(title: "Pinboard Details", message: "Please enter your Pinboard Username and API Token to access your bookmarks", preferredStyle: .Alert)
    //Add a text field
    pinboardUserDetailsSheetController.addTextFieldWithConfigurationHandler((usernameField: UITextField!) in
        usernameField.placeholder = "Username"
        var parent = self.presentingViewController as! ViewController
        usernameField.text = parent.pinboardUsername
        pinboardUsernameField = usernameField
    )
    pinboardUserDetailsSheetController.addTextFieldWithConfigurationHandler((apiTokenField: UITextField!) in
        apiTokenField.placeholder = "API Token"
        var parent = self.presentingViewController as! ViewController
        apiTokenField.text = parent.pinboardAPIToken
        pinboardAPITokenField = apiTokenField
    )
    pinboardUserDetailsSheetController.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: nil))
    pinboardUserDetailsSheetController.addAction(UIAlertAction(title: "Done", style: .Default, handler:  (action) -> Void in
        // Now do whatever you want with inputTextField (remember to unwrap the optional)
        var parent = self.presentingViewController as! ViewController
        parent.pinboardAPIToken = pinboardAPITokenField?.text
        parent.pinboardUsername = pinboardUsernameField?.text
    ))
    //Present the AlertController
    self.presentViewController(pinboardUserDetailsSheetController, animated: true, completion: nil)


【问题讨论】:

如果要持久化的数据比较简单,使用NSUserDefaults,如果比较复杂,使用CoreData 我认为这很简单,它只是 2 个字符串变量(1 个用于用户名,1 个用于 API 令牌)。我该如何使用 NSUserDefaults 呢? 我同意,但我不确定安全性以及是否应该使用 NSUserDefaults 存储此类内容。只是开始,NSUserDefaults 非常简单,只需几行代码。 它现在正在使用几行 NSUserDefaults :) 虽然我对 NSXMLParser 有一些问题,但我会将它作为一个单独的问题发布。谢谢波特兰 :) 【参考方案1】:

该问题已由 Portland Runner 在 cmets 中回答。有效的解决方案是使用 NSUserDefaults 保存文本。

感谢波特兰跑者! :)

【讨论】:

以上是关于如何使我在 UIAlertController 内的 UITextField 中输入的数据通过 Swift 中的重置持续存在?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SWIFT 中不执行任何操作就关闭 UIAlertController?

如何从 Appdelegate 显示 UIAlertController

如何在Objective C中通过UIView获取UIAlertController?

在swift中,如何在顶部保持一个UIViewController().view?比如UIAlertController

如何使我在 VS 2015 Web 开发环境上运行的 AngularJS SPA 正确刷新

我在 Flutter 中遇到了一个问题:在构建 TextField 时抛出了以下断言,它使我遇到了一个奇怪的问题