如何使用 Swift 从 ViewController 获取 TextView 的文本值?

Posted

技术标签:

【中文标题】如何使用 Swift 从 ViewController 获取 TextView 的文本值?【英文标题】:How can I get the text value of TextView from a ViewController using Swift? 【发布时间】:2016-03-16 16:43:59 【问题描述】:
class AlertViewController: UITableViewController
    @IBOutlet weak var alertText: UITextView!
    override func viewDidLoad() 
        super.viewDidLoad()
        alertText.text = "alert"
    

所以我想在AppDelegate.swift 中获取文本值,我有这个:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
    let alertText = AlertViewController().alertText
    print(alertText.text)
    return true

我收到了这个错误

致命错误:在展开可选值时意外发现 nil (lldb)

【问题讨论】:

调用 AlertViewController() 不会调用 viewDidLoad。所以是的,alerttext 为零,然后你崩溃了。 viewDidLoad 仅在第一次访问视图时(由您或由 UIKit)调用 谢谢,我了解了更多关于viewDialod函数的知识 【参考方案1】:
@IBOutlet weak var alertText: UITextView!

看看您是如何将其实例化为“弱”变量的。这意味着除非需要,否则它不会被实例化。正如 Ro22e0 所说,我不确定您为什么在 appDelegate 中调用它,但请确保类对象已实例化。 textField.text 值也是可选的,因此在尝试像这样打印之前检查 nil

if let alertText = AlertViewController.text 
    print(alertText)

【讨论】:

“弱”不是这个意思 "因为弱引用不会对其引用的实例保持强控制,所以当弱引用仍在引用它时,该实例可能会被释放。因此,ARC 会自动设置当它引用的实例被释放时,对 nil 的弱引用。” -developer.apple.com/library/ios/documentation/Swift/Conceptual/…【参考方案2】:
override func viewDidAppear(animated: Bool) 
        super.viewDidAppear(true)
        print("text:", alertText.text)

AppDelegate 在 ViewController 之前启动

【讨论】:

在 AppDelegate 中,我调用 AlertViewController()。 viewDidAppear(true),我仍然遇到致命错误:在展开可选值 (lldb) 时意外发现 nil viewDidAppear 在 ViewController 而不是 AppDelegate 中被调用

以上是关于如何使用 Swift 从 ViewController 获取 TextView 的文本值?的主要内容,如果未能解决你的问题,请参考以下文章

uipageviewcontroller 中的 Swift uipageviewcontroller

使用 Swift + Alamofire + Swifty-Json 将动态数据传递给 UIScrollView

iOS 应用程序在 swift 中关闭视图后冻结

如何设置滚动视图委托? [关闭]

如何将大量文本从 webview 发送到 objc?

如何从单元格 tableView 转到下一页到 2 页