我有两个UITableViewController,第一个:
protocol FetchUserProfileData {
func getNumberOfRequests()
}
class ListEvents: UITableViewController{
var fetchInfo:FetchUserProfileData?
func getNumberOfRequests() -> Int{
return 12
}
和UIViewController:
class UserProfileDetails:UIViewController, FetchUserProfileData {
var listEvents: UserListEvents?
func getNumberOfRequests(){
}
override func viewDidLoad(){
listEvents?.fetchInfo = self
print(listEvents?.getNumberOfRequests())
并且这一行:print(listEvents?.getNumberOfRequests())
为我提供nil
值,而不是12
...这里有什么问题?
----编辑 好的,现在我看到listEvents是空的......所以我的问题是如何将这些数据从ListEvents传递给UserProfileDetails?
答案 0 :(得分:0)
在此代码中,listEvents
可能为零。
但是,你使用协议的方式对我来说很奇怪。我希望:
getNumberOfRequests
ListEvents
应该实施协议,而不是UserProfileDetails
getNumberOfRequests()
中的空UserProfileDetails
答案 1 :(得分:0)
您没有设置<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<input type="checkbox" id="basic_single" name="basic_single" value="400">
<input type="checkbox" id="basic_double" name="basic_double" value="680">
<input type="text" name="total" value="" size="30" id="total">
。当您使用故事板时,您应该设置listEvents
不早于(覆盖)fetchInfo
。以谷歌为例,网络上充满了它们。以编程方式进行segue时,可以在实际创建新视图控制器之前设置该属性。您最好使用prepareForSegue
,因为在这种情况下,当listEvents为nil时,您将获得异常。
答案 2 :(得分:0)
我做了一些更改你的代码,这会将数据从ListEvents传递给UserProfileDetails。
protocol FetchUserProfileDelegate {
func getNumberOfRequests()->Int
}
class ListEvents: UITableViewController,FetchUserProfileDelegate{
var userProfile: UserProfileDetails?
override func viewDidLoad() {
userProfile = UserProfileDetails()
userProfile?.delegate = self
}
// MARK: FetchUserProfileDelegate
func getNumberOfRequests() -> Int{
return 12 // return as your target Int
}
}
class UserProfileDetails:UIViewController {
var delegate:FetchUserProfileDelegate?
override func viewDidLoad() {
if let _ = delegate{
let resultInt = delegate?.getNumberOfRequests() // get the Int form ListEvents
print(resultInt)
}
}
}
答案 3 :(得分:0)
将数据从一个控制器移动到另一个控制器的想法非常普遍。大多数情况下,这是使用segue完成的。控制器可以有一个名为prepareForSegue的函数。在转换发生之前调用此函数。在prepareForSegue函数内部,系统为您提供目标控制器对象。您获取该对象并在其中设置数据。当转换发生并且您的目标控制器出现时,它已经拥有您想要提供给它的数据。
使用Xcode创建一个新项目。选择“Master-Detail Application”。这将为您生成代码,它是如何在控制器之间传递数据的一个很好的例子。