我试图通过代码将变量传递给另一个视图。当用户点击表格视图数据时,我的应用会将表格数据传递到下一个视图。但是我的第二个屏幕上有一个“班级没有初始化者”:
点击时调用第二个屏幕的表视图:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
{
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("editFriend") as! EditFriendViewController
self.presentViewController(nextViewController, animated: true, completion: nil)
nextViewController.friend = friendArray[indexPath.row];
}
第二屏幕代码:
import UIKit
import CoreData
class EditFriendViewController: UIViewController {
var friend: Friends
@IBOutlet weak var fName: UITextField!
@IBOutlet weak var lName: UITextField!
@IBOutlet weak var mobile: UITextField!
@IBOutlet weak var gender: UIPickerView!
@IBOutlet weak var address: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
fName.text = friend.firstName!;
lName.text = friend.lastName!;
mobile.text = friend.mobile!;
address.text = friend.address!;
}
}
答案 0 :(得分:2)
那是因为你已经在init()
方法中定义了一个属性而没有初始化它。如果你需要一个属性来初始化而不是init
方法,例如。 viewDidLoad
。这在ViewController中很常见。因此,您需要将属性定义为隐式展开的可选,这意味着您需要将friend
声明为Friends!
而不是Friends
,或者如果您需要属性是可选的,然后将其声明为Friend?
import UIKit
import CoreData
class EditFriendViewController: UIViewController {
var friend: Friends! // declare friend as implicitly unwrapped optional, you are responsible to assign any value to it before using it
....
override func viewDidLoad() {
super.viewDidLoad()
friend = Friend() // Assign a value to friend property
}
}
答案 1 :(得分:1)
添加@Enix和@Shailesh的答案,
在显示nextViewController
,
viewController
因此,我认为你不会在下一个VC中获得价值,你总会得到nil
。
因此在呈现viewController之前传递数据。
要替换的代码
self.presentViewController(nextViewController, animated: true, completion: nil)
nextViewController.friend = friendArray[indexPath.row];
BY
nextViewController.friend = friendArray[indexPath.row];
self.presentViewController(nextViewController, animated: true, completion: nil)
答案 2 :(得分:0)
将朋友变量设为可选
var friend: Friends?
在访问该值时使用
if let friend = friend {
//use friend value to assign to values to label }
编译器告诉你朋友变量没有初始化器。类的所有变量都应该通过init方法具有初始值,或者它们应该被声明为可选项。并且在你用单行写入表达式或语句之前,分号也不是强制性的,所以你可以在最后删除分号。