代码之家  ›  专栏  ›  技术社区  ›  Tyrone

在Swift中将字符串从视图控制器传递到文件

  •  0
  • Tyrone  · 技术社区  · 10 年前

    在swift中,我想让用户在特定视图中的UITextView中输入一个文本字符串,然后将该字符串传递到一个单独的文件中,这样我就可以处理它了。

    在我的PostViewController文件中

    class PostViewController: UIViewController {
    
    class var sharedPost: PostViewController {
        struct Static {
            static var instance: PostViewController?
            static var token: dispatch_once_t = 0
        }
        dispatch_once(&Static.token) {
            Static.instance = PostViewController()
        }
        return Static.instance!
    }
    
    
    @IBOutlet weak var postText: UITextView!
    
    ...
    

    这将创建它的一个实例,并将用户的文本放入postText变量中

    在我想传递给的文件中,我有

    class Grade {
        let string = PostViewController.sharedPost
        var newString : String!
    
     ...
    
        init() {
            newString = self.string.postText.text
    

    然而,在输入时,程序崩溃,并给我一个“致命错误:在打开可选值时意外发现nil”。这是否意味着它没有阅读输入文本?我能做什么来解决这个问题?我还尝试了newString=self.string.postText?。短信,但它也崩溃了。

    1 回复  |  直到 10 年前
        1
  •  0
  •   Phillip Mills    10 年前

    PostViewController() 在您的 dispatch_once 创建一个新对象,但由于它不是显示的一部分,因此它的视图从未加载,因此它 postText 出口没有填满。

    假设您的应用程序创建了 PostViewController 实际显示的内容,您需要获得对该内容的引用才能从文本视图中读取。

    编辑:

    一种方法是 PostView控制器 记住最近出现的实例(如果有的话)。

    class PostViewController: UIViewController {
    
    static var sharedPost: PostViewController?
    
        override func viewDidLoad() {
            super.viewDidLoad()
            PostViewController.sharedPost = self
        }
    
    }
    

    (我不确定这项任务在 viewDidLoad viewWillAppear 。你可能想尝试一下。)


    另一方面,我们似乎在问和回答错误的问题。

    如果 PostView控制器 更新 Grade 当用户输入信息而不是 等级 必须去钓鱼吗?