Ios 斯威夫特:我的班级在视图中是什么样的

Ios 斯威夫特:我的班级在视图中是什么样的,ios,swift,uitableview,storyboard,swift2,Ios,Swift,Uitableview,Storyboard,Swift2,我正在构建一个应用程序,其中包含一个包含tableView控制器的容器视图。我创建了这个tableView,但我不知道如何再次访问这个对象,以便调用它的函数。目前有一个BucketTableViewController对象正在自动创建(可能是从情节提要)。然后,稍后我想对其调用一个函数并创建另一个BucketTableViewController对象。我可以用该方法上的print语句验证它们的唯一性。如何为作为原始对象的对象设置变量 import UIKit class FirstViewCo

我正在构建一个应用程序,其中包含一个包含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()
    }
}

您可以从拥有该容器的视图控制器中的
prepareforsque(\uquo:sender:)
获取对它的引用。确保该标识符与您在Interface Builder中故事板的序列上设置的标识符的名称相匹配。或者,如果您确定没有其他序列的目标类型为
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
        }
    }
}

对于这一点,评论太紧了,所以我要给出一个答案。您可以将
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
    }
}

为什么不将
bucketsVC
作为一个实例变量?@ZoffDino您介意解释一下吗?当项目启动时,它会创建一个BucketTableViewController
self.bucketsVC=BucketTableViewController()
创建另一个唯一的对象。我希望bucketsVC是在启动时创建的原始对象(在编写代码之前),因为表视图已经在视图中启动并运行,所以我不想进行分段。我不需要去。我只需要找到它所属的对象,我假设您使用的是Interface Builder中的容器视图,它通过“嵌入”序列连接视图控制器。这种类型的segue不同于其他类型的segue,因为它不是一种转换,而只是将视图控制器嵌入其容器中的机制。加载视图控制器时将调用此选项。这是正确答案(已投票)。使用容器视图托管子视图控制器时,它设置的链接是嵌入序列。这很奇怪,但这是segue的一个特例,
prepareforsgue
方法确实会启动。加载父视图控制器的视图后,将立即调用嵌入序列。@PatrickLynch您是正确的,它现在正在工作。谢谢你的帮助我永远也不会明白的。邓肯也证实了你的说法。我很感激