2016-10-08 3 views
0

Я пытаюсь передать переменную другому виду через код. Когда пользователь нажимает на данные табличного представления, мое приложение передает данные таблицы в следующее представление. Но я получаю "класс не имеет инициализаторов" на моем втором экране:Swift - Class не имеет инициализатора

Табличное вызова второго экрана на клик:

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!; 
} 

}

+2

Возможный дубликат [Класс не имеет инициализаторами Swift] (http://stackoverflow.com/questions/27797351/class-has- no-initializers-swift) –

ответ

1

Добавление к ответу @Enix и @Shailesh, я могу увидеть вы передаете данные в nextViewController, после представления viewController,

Поэтому я не думаю, что вы получите значение в nextVC , всегда вы получите 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) 
+0

спасибо за головы! –

2

Это потому, что вы определили свойство без его инициализации в своем методе init(). Если вам нужно свойство 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 
    } 
} 
+0

Эй, я избавился от этой ошибки. Но теперь я не могу получить данные в объекте friend. При попытке записать данные объекта в текстовое поле я получаю сообщение об ошибке «неожиданно найденный nil while unrwapping a optional value». –

+0

@Janmenjaya дает вам подсказки о вашей проблеме. Попробуйте его ответ. Вы должны назначить значение другу перед представлением контроллера вида. – Enix

0

Сделать друг переменный в качестве дополнительного

 var friend: Friends?  

И при доступе к использованию значения

if let friend = friend { 
     //use friend value to assign to values to label } 

Компилятор сообщает вам, что переменная друга не имеет инициализатора. Все переменные класса должны иметь начальное значение через метод init или должны быть объявлены как дополнительные. А также точки с запятой не являются обязательными в swift, пока вы не напишете выражение или оператор в одной строке, поэтому вы можете удалить точки с запятой в конце.