2017-06-27 8 views
0

iPad 2シミュレーションの横方向で開始するときに、セルのラベルがデフォルトのマスター詳細ビューの空白になります。コントローラのviewWillAppear関数でマスタービューをリロードすると、ポートレートに戻り、ランドスケープに戻った後でなければなりません。私は、何時間も助けを求めて、さまざまな場所でtableView.reloadData()を試していても、私が逃しているものを見つけ出すことはできません。ランドスケープで開始するとマスタービューのセルラベルが空白になる

これはUIDocumentアプリであり、まだ準備が整っていますが、iCloudはまだ実装されていません。これまでは、ローカル・ドキュメントのURL、ファイル名、および表示名(?)を、マスター・ビューのセル・ラベルが作成される配列にフェッチするだけで済みました。私のように、デフォルトのXcodeのマスター詳細ビューの設定に慣れていない人、それらのために

class MasterViewController: UITableViewController, DetailViewControllerDelegate { 

private var detailViewController: DetailViewController? = nil 
// var objects = [AnyObject]() 
internal lazy var notesController = NotesController() 

internal override func viewDidLoad() { 
    super.viewDidLoad() 

    // Do any additional setup after loading the view, typically from a nib. 
    print("viewDidLoad") 

    // determine preferred storage location for documents 
    notesController.documentsInCloud = false 

    // discover documents 
    notesController.discoverDocuments() 
//  tableView.reloadData() 

    navigationItem.leftBarButtonItem = editButtonItem() 

    if let split = splitViewController { 
     let controllers = split.viewControllers 
     detailViewController = 
      (controllers[controllers.count-1] as! UINavigationController 
       ).topViewController as? DetailViewController 
     detailViewController!.delegate = self 
    } 
} 

internal override func viewWillAppear(animated: Bool) { 
    print("viewWillAppear") 
    clearsSelectionOnViewWillAppear = splitViewController!.collapsed 
    super.viewWillAppear(animated) 

    tableView.reloadData() 
} 

// MARK: - Segues 

internal override func prepareForSegue(segue: UIStoryboardSegue, 
           sender: AnyObject?) { 
    print("prepareForSegue") 
    if segue.identifier == "showDetail" { 
     if let indexPath = tableView.indexPathForSelectedRow { 
      let controller = 
       (segue.destinationViewController as! UINavigationController 
        ).topViewController as! DetailViewController 
      let URL = notesController.notes.array[indexPath.row].URL 
      controller.delegate = self 
      controller.detailItem = Note(fileURL: URL) 
      controller.selectedItemIndex = indexPath.row 
      controller.navigationItem.leftBarButtonItem = 
       splitViewController?.displayModeButtonItem() 
      controller.navigationItem.leftItemsSupplementBackButton = true 
      splitViewController?.toggleMasterView() 
     } else { 
      let controller = 
       (segue.destinationViewController as! UINavigationController 
        ).topViewController as! DetailViewController 
      controller.delegate = self 
      controller.configureView() 
      controller.navigationItem.leftBarButtonItem = 
       splitViewController?.displayModeButtonItem() 
      controller.navigationItem.leftItemsSupplementBackButton = true 
     } 
    } 
} 

// MARK: - Table View 

internal override func numberOfSectionsInTableView(tableView: UITableView) 
    -> Int { 
    return 1 
} 

internal override func tableView(tableView: UITableView, 
         numberOfRowsInSection section: Int) -> Int { 
    return notesController.notes.array.count 
} 

internal override func tableView(tableView: UITableView, 
         cellForRowAtIndexPath indexPath: NSIndexPath) 
    -> UITableViewCell { 
     print("cellForRowAtIndexPath") 
     let cell = 
      tableView.dequeueReusableCellWithIdentifier(
       "Cell", 
       forIndexPath: indexPath) 
     let fileRepresentation = notesController.notes.array[indexPath.row] 
     if let title = fileRepresentation.displayName { 
      cell.textLabel?.text = title 
     } else { 
      cell.textLabel?.text = fileRepresentation.fileName 
     } 
     return cell 
} 

internal override func tableView(tableView: UITableView, 
         canEditRowAtIndexPath indexPath: NSIndexPath) 
    -> Bool { 
    // Return false if you do not want the specified item to be editable. 
    return true 
} 

internal override func tableView(
    tableView: UITableView, 
    commitEditingStyle 
    editingStyle: UITableViewCellEditingStyle, 
    forRowAtIndexPath indexPath: NSIndexPath) { 
    print("commitEditingStyle") 
    if editingStyle == .Delete { 
     let fileManager = NSFileManager.defaultManager() 
     let fileRepresentation = notesController.notes.array[indexPath.row] 
     let URL = fileRepresentation.URL 
     do { 
      try fileManager.removeItemAtURL(URL); 
      notesController.notes.delete(fileRepresentation); 
      tableView.deleteRowsAtIndexPaths([indexPath], 
              withRowAnimation: .Fade); 
      performSegueWithIdentifier("showDetail", sender: self) 
     } catch let error as NSError { 
      print(error.localizedDescription) 
     } 
    } // else if editingStyle == .Insert { 
     // Create a new instance of the appropriate class, insert it into 
     // the array, and add a new row to the table view. 
    // } 
} 

// MARK: - Delegate Functions 

internal func reloadMasterViewData(sender: DetailViewController) { 
    tableView.reloadData() 
} 

} 

答えて

0

、はい、マスタービューが移入横向きで起動しない:ここで

はMasterViewControllerクラスのほとんどがありますそれが表示されるように設定されているラベルであれば、私の問題は、ビューを非同期に構築し、ビューをロードしたときにその配列が準備できていなかったことです。私は配列が私のUIDocumentsを発見し終わったとき私のマスタービューに語ったNSNotificationを設定することでこれを解決しました。 Andrew Bancroftのブログ(https://www.andrewcbancroft.com/2014/10/08/fundamentals-of-nsnotificationcenter-in-swift/)は、この点で非常に役に立ちました。

関連する問題