2017-08-24 14 views
1

我有一個簡單的實體:斯威夫特3:準備(爲:發件人:)

extension Team { 

@nonobjc public class func fetchRequest() -> NSFetchRequest<Team> { 
    return NSFetchRequest<Team>(entityName: "Team") 
} 

@NSManaged public var name: String? 
@NSManaged public var phone: String? 
@NSManaged public var department: String? 
@NSManaged public var position: String? 

} 

圖片爲便於理解:

enter image description here

我加載當前實體從核心數據應用成功。此外,我有一個UITableViewController與屬性成員(這是從團隊實體獲取結果的存儲)。

var members: [Team] = []

應用的啓動後(viewDidLoad中(_ :)members.count等於7,這是正確的。此外,成員的所有這些元素通過的UITableView中的UITableViewController使用:

enter image description here

我的任務是打開詳細視圖控制器誰將會從竊聽單元數據。對於這個代表團我用經典準備(爲:發件人:)中的UITableViewController方法(誰是segue.source在當前情況下):

// MARK: - Navigation 

extension TeamListViewController { 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    guard segue.identifier == segueIdentifier, 
     let memberDetailsViewController = segue.destination as? MemberDetailsViewController else { 
     fatalError("Wrong destination!") 
    } 

    guard let selectedIndex = tableView.indexPathForSelectedRow?.row else { 
     fatalError("Out of range") 
    } 

    guard let name  = members[selectedIndex].name, 
      let phone  = members[selectedIndex].phone, 
      let department = members[selectedIndex].department, 
      let position = members[selectedIndex].position else { 

     fatalError("No correct data") 
    } 

    memberDetailsViewController.memberNameLabel.text!  = name 
    memberDetailsViewController.memberPhoneNumberLabel.text! = phone 
    memberDetailsViewController.memberDepartmentLabel.text! = department 
    memberDetailsViewController.memberPositionLabel.text! = position 

} 

} 

因此,應用程序啓動,我點擊任何一個我想要的任何細胞打開更多細節和應用程序崩潰!

fatal error: unexpectedly found nil while unwrapping an Optional value

enter image description here

然而,我的變量(姓名,電話,部門,職位)都OK。他們與價值觀!

enter image description here

哦,是的。我試着在下面MemberDetailsViewController檢索UILabels數據:

// MARK: - IBOutlets 
@IBOutlet weak var memberNameLabel:  UILabel! 
@IBOutlet weak var memberPhoneNumberLabel: UILabel! 
@IBOutlet weak var memberDepartmentLabel: UILabel! 
@IBOutlet weak var memberPositionLabel: UILabel! 

什麼是可以在這裏是一個問題?

+1

而不是直接從prepare方法(尚未加載)設置IBoutles值,請嘗試在MemberDetailsViewController的viewDidLoad中設置值(爲了您可以創建存儲的屬性並從prepare方法中設置值)。 – Sahil

+1

謝謝@Sahil。這真的是個好主意。 – mcsh0k

回答

2

因爲你的數據設置在prepare(for segue: UIStoryboardSegue, sender: Any?)方法TeamListViewController其中MemberDetailsViewController沒有正確加載這就是你得到nil

我的建議是:在MemberDetailsViewController添加對象如var members: Team?,並將其從TeamListViewController傳遞出去,這樣就不會出現錯誤。

+1

簡單的魔法!它幫助了我! – mcsh0k

+0

很高興爲您效勞 – Govaadiyo