Swift:视图中我班级的哪个实例

时间:2015-07-07 23:26:55

标签: ios swift uitableview storyboard swift2

我正在构建一个包含tableView控制器的容器视图的应用程序。我创建了这个tableView,但我不知道如何再次访问这个对象,所以我可以调用它上面的函数。目前有一个自动创建的BucketTableViewController对象(可能来自故事板)。然后我想调用它上面的函数并创建另一个BucketTableViewController对象。我可以验证它们对该方法的print语句是唯一的。如何为作为原始对象的对象设置变量?

import UIKit

class FirstViewController: UIViewController {


    var bigArray = ["M", "A", "R", "C"]
    let delegate = UIApplication.sharedApplication().delegate as! AppDelegate

    override func viewDidLoad() {
        super.viewDidLoad()
        reachForWebsite()    
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func reachForWebsite(){
        let url = NSURL(...)
        let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
            do {
                ...
                // HERE IS THE ISSUE
                var bucketsVC = BucketTableViewController()
                bucketsVC.updateBuckets(self.bigArray)
            } catch let myJSONError {
                print(myJSONError)
            }
        }
        task!.resume()
    }
}

2 个答案:

答案 0 :(得分:2)

您可以从拥有容器的视图控制器中的prepareForSeque(_:sender:)获取对它的引用。确保该标识符与您在Interface Builder中的故事板中在segue上设置的标识符的名称相匹配。或者,如果您确定没有其他目的地类型为BucketTableViewController的分段,则可以省略标识符部分。

class BucketTableViewController: UITableViewController {}

class FirstViewController: UIViewController {

    var bucketViewController: BucketTableViewController!

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

        if let vc = segue.destinationViewController as? BucketTableViewController where segue.identifier == "embeddedBuketViewcontroller" {
            self.bucketViewController = vc
        }
    }
}

答案 1 :(得分:0)

评论太紧了,所以我把它作为答案。您可以将 bucketsVC`设为实例变量:

class FirstViewController: UIViewController {
    var bucketsVS : BucketTableViewController?

    func reachForWebsite(){
        ...
        do {
            self.bucketsVC = BucketTableViewController()
            self.bucketsVC!.updateBuckets(self.bigArray)
        } catch {
            ...
        }

        // Now you can use it anywhere within your UIViewController
    }
}