Ich präsentiere einen Ansichtscontroller modal als benutzerdefinierten Popover aus einer Tabellenansicht mit didSelectRowAtIndexPath
und prepareForSegue
. Die Daten auf dem nächsten Ansichtscontroller geben jedoch null zurück. Ich habe das Problem darauf beschränkt, die Daten durch das Protokoll selbst zu leiten. Im Folgenden werde ich den relevanten Code für beide View-Controller und das Protokoll einschließen.Daten, die als Null nach dem Durchlaufen des Protokolls zum nächsten Ansichtscontroller zurückgegeben werden
First View Controller:
protocol barTableViewControllerDelegate {
func acceptData(data: AnyObject!)
}
class barTableViewController: UITableViewController, CLLocationManagerDelegate {
var delegate: barTableViewControllerDelegate?
var data: AnyObject?
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
print("yes")
let classIndexPath = self.tableView.indexPathForSelectedRow!
print(classIndexPath.row)
print("yes2")
let selectedClass = names[classIndexPath.row]
print("yes3")
print(names[classIndexPath.row])
self.delegate?.acceptData(selectedClass)
self.performSegueWithIdentifier("showAd", sender: self)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if(segue.identifier == "showAd") {
/* if let objIndexPath = self.tableView.indexPathForSelectedRow?.row {
let obj = queryArray[objIndexPath]
let navVC = segue.destinationViewController as! UINavigationController
let detailVC = navVC.topViewController as! DetailViewController
detailVC.post = obj */
print("is segue working")
let popOverVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("adPopUp") as! PopUpViewController
self.addChildViewController(popOverVC)
popOverVC.view.frame = self.view.frame
self.view.addSubview(popOverVC.view)
popOverVC.didMoveToParentViewController(self)
print("segue working")
}
}
Second-View-Controller:
class PopUpViewController: UIViewController {
func acceptData(data: AnyObject!) {
self.post = data! as! String
}
override func viewDidLoad() {
super.viewDidLoad()
print("here")
print(post)
print(self.post)
print("here2")
}
}
Das letzte Protokoll gedruckt ist here.
Stops bei print(post)
. Ich glaube nicht, dass ich Daten im zweiten View-Controller deklarieren muss?
Wird die 'acceptData' Methode aufgerufen? Es ist möglich, dass "delegate" in "barTableViewController" gleich null ist. – Eluss
@Eless acceptData-Methode wird im Protokoll im ersten Ansichtscontroller oberhalb der Klasse deklariert. Es wird im zweiten View-Controller oberhalb der viewDidLoad-Methode aufgerufen. Könnten Sie bitte erläutern, wie/warum der Delegat in barTableViewController null ist? – boppa