Swift: 我的 class 的哪个实例在视图中
Swift: What instance of my class is in the view
我正在构建一个带有包含 tableView 控制器的容器视图的应用程序。我创建了这个 tableView,但我不知道如何再次访问这个对象,所以我可以调用它的函数。目前有一个自动创建的 BucketTableViewController 对象(可能来自情节提要)。然后我想在它上面调用一个函数并创建另一个 BucketTableViewController 对象。我可以通过该方法的打印语句来验证它们是唯一的。如何为原始对象设置变量?
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()
}
}
您可以从拥有该容器的视图控制器中的 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
}
}
}
一条评论太紧了,所以我把它作为一个答案。您可以使 </code>bucketsVC` 成为实例变量:</p>
<pre><code>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
}
}
我正在构建一个带有包含 tableView 控制器的容器视图的应用程序。我创建了这个 tableView,但我不知道如何再次访问这个对象,所以我可以调用它的函数。目前有一个自动创建的 BucketTableViewController 对象(可能来自情节提要)。然后我想在它上面调用一个函数并创建另一个 BucketTableViewController 对象。我可以通过该方法的打印语句来验证它们是唯一的。如何为原始对象设置变量?
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()
}
}
您可以从拥有该容器的视图控制器中的 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
}
}
}
一条评论太紧了,所以我把它作为一个答案。您可以使 </code>bucketsVC` 成为实例变量:</p>
<pre><code>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
}
}