2016-07-11 2 views
1

私は、UITabBarControllerの中にあるUITableViewにいくつかの(今はハードコードされている)データを表示しようとしていますが、行を埋めるのが難しいです。UITabBarControllerにUITableViewデータを表示する正しいパターンは何ですか?

ここにここに私の予約ストア(ReservationStore.swift)

import UIKit 

class ReservationStore { 
    // Store all our schedules 
    var allReservations = [Reservation]() 

    func createReservation() -> Reservation { 
     let newReservation = Reservation(tailNumber: "N53440", aircraftType: "C172S", arrivalTime: "07-06-2016 07:00am", eta: "1:58") 

     allReservations.append(newReservation) 

     return newReservation 
    } 

    init() { 
     createReservation() 
    } 
} 

、ここにコードが私のUITableView図であるされて、私のデータオブジェクト(Reservation.swift)

import UIKit 

class Reservation: NSObject { 
    var tailNumber: String 
    var aircraftType: String 
    var arrivalTime: String 
    var eta: String 

    init(tailNumber: String, aircraftType: String, arrivalTime: String, eta: String) { 
     self.tailNumber = tailNumber 
     self.aircraftType = aircraftType 
     self.arrivalTime = arrivalTime 
     self.eta = eta 

     super.init() 
    } 
} 

ためのコードがありますコントローラ(ScheduleViewController.swift)

import UIKit 

class ScheduleViewController: UITableViewController { 
    var reservationStore: ReservationStore! 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return reservationStore.allReservations.count 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("UITableViewCell", forIndexPath: indexPath) 
     let item = reservationStore.allReservations[indexPath.row] 

     cell.textLabel?.text = item.tailNumber 

     return cell 
} 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     let reservationStore = ReservationStore() 

     let tabController = segue.destinationViewController as! UITabBarController 
     let reservationController = tabController.viewControllers![1] as! ScheduleViewController 

     reservationController.reservationStore = reservationStore 
    } 
} 

致命的なエラーが発生しました:unexpe返されるときにオプション値をアンラップしている間に無限に見つかりました。reservationStore.allReservations.count

ユーザがスケジュールのUITabController項目をクリックしてビューがロードされる直前に、prepareForSegueが呼び出されると思います。これは私のReservationStoreのinit()をトリガーし、配列内に1つの要素を作成するはずですが、配列がカウントされるまでにnilなので、起こっているとは思われません。

この作成はprepareForSegueにある必要がありますか?誰かが正しい方向に私を指すことができるか、次の頭にどこにこれが一日かそうではないか分からないこれを乱されている?

答えて

1

prepareForSegue()は、ビューが読み込まれる前に呼び出されません。これは、の場合、ビューコントローラが新しいコントローラをセグに準備しているときに呼び出されます。ビューコントローラ。 ScheduleViewControllerreservationStoreプロパティに割り当てるものは何もないので、nilなので、クラッシュします。

あなたがしたいすべてがそのプロパティに割り当てられたReservationStoreのインスタンスを持っている場合は、プロパティを定義するとき、あなただけの既定値として設定することができます

class ScheduleViewController: UITableViewController { 
    var reservationStore = ReservationStore() 

    // … 
} 
+0

をほらああ!ありがとうございました! –

関連する問題