将视图控制器中的字符串传递给Swift中的文件

时间:2016-03-17 17:09:02

标签: string swift class instance fatal-error

在swift中,我想让用户在特定视图中的UITextView中输入一个文本字符串,然后将该字符串传递给一个单独的文件,以便我可以用它做任何事情。

在我的PostViewController文件中,我有

        <div class="container">
        <div class="row">
            <div class="col-lg-6">
                <!-- <img class="logoImg" src="assets/img/logo.png" /> -->

                <span class="logoHeader">croppic</span>
                <h2>is an image cropping jquery plugin that will satisfy your needs and much more</h2>

                <a href="#" class="downloadButton" >download <sup>v1.0.1</sup></a>

            </div><!-- /col-lg-6 -->
            <div class="col-lg-6 cropHeaderWrapper">
                <div id="croppic"></div>
                <span class="btn" id="cropContainerHeaderButton">click here to try it</span>
            </div><!-- /col-lg-6 -->

        </div><!-- /row -->         
    </div><!-- /container -->

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

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

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!

...

然而,在输入时,程序崩溃并给我一个“致命错误:在展开Optional值时意外地发现nil”。这是否意味着它没有在输入文本中阅读?我该怎么做才能解决这个问题?我也尝试过newString = self.string.postText?.text,但也崩溃了。

1 个答案:

答案 0 :(得分:0)

PostViewController()内的

dispatch_once会创建一个新对象,但由于它不是显示的一部分,因此它的视图永远不会被加载,因此它的postText出口没有被填充

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

编辑:

一种方法是让PostViewController记住最近呈现的实例,如果有的话。

class PostViewController: UIViewController {

static var sharedPost: PostViewController?

    override func viewDidLoad() {
        super.viewDidLoad()
        PostViewController.sharedPost = self
    }

}

(我不确定该作业在viewDidLoadviewWillAppear中是否更有意义。您可能想要尝试一下。)

另一方面,似乎我们可能会问及回答错误的问题。

如果PostViewController在用户输入信息时更新Grade而不是Grade必须去钓鱼,那么它是否更有意义?