Пользовательский TableViewCell с использованием FirebaseUI и Swift

В настоящее время я пытаюсь использовать пользовательский интерфейс Firebase для заполнения UITableView пользовательской ячейкой. К сожалению, это оказалось сложно, и предыдущие предложенные исправления не работают.

Документация (https://github.com/firebase/FirebaseUI-iOS#using-storyboards-and-prototype-cells) демонстрирует это:

self.dataSource = FirebaseCollectionViewDataSource(ref: firebaseRef cellClass: YourCustomClass.self cellReuseIdentifier: @"<YOUR-REUSE-IDENTIFIER>" view: self.collectionView)

self.dataSource.populateCellWithBlock { (cell: YourCustomClass, obj: NSObject) -> Void in
  // Populate cell as you see fit
  cell.customView = customView;
}

self.collectionView.dataSource = self.dataSource;

Копирование этого и вставка моего собственного TableViewCellClass приводит к этой ошибке:

Невозможно преобразовать значение типа "(ManageTableViewCell, NSObject) -> Void" в ожидаемый тип аргумента "(UITableViewCell, NSObject) -> Void"

Затем я увидел ветку этой проблемы (https://github.com/firebase/FirebaseUI-iOS/issues/16), где один из сотрудников Firebase сказал, что принудительное приведение будет работать следующим образом:

 self.dataSource.populateCellWithBlock { (cell: UITableViewCell, obj: NSObject) -> Void in
  // Populate cell as you see fit, like as below
  var customCell = cell as! CustomTableViewCell;
  let snapshot = obj as! FDataSnapshot; // danger this can be null on deletion!
}

Однако это немедленно приводит к ошибке:

Невозможно преобразовать UITableViewCell в более необязательный тип ManageTableViewCell!

Есть ли у кого-нибудь предложения о том, как это сделать. Похоже, это распространенная проблема, не имеющая реального решения.


person dylankbuckley    schedule 12.03.2016    source источник
comment
Что такое ManageTableViewCell? Покажите нам, как именно выглядит ваш populateCellWithBlock. Предоставление нам примеров из документации не очень помогает   -  person FruitAddict    schedule 12.03.2016
comment
Я только что нашел проблему @FruitAddict - разместил в ответе.   -  person dylankbuckley    schedule 12.03.2016


Ответы (1)


Я решил это. Проблема в том, что вам нужно использовать «prototypeReuseIdentifier», а не «cellReuseIdentifier».

Мой рабочий код выглядит следующим образом:

    dataSource = FirebaseTableViewDataSource(query: firebaseQuery, prototypeReuseIdentifier: "textCell", view: self.tableView)

    dataSource.populateCellWithBlock { (cell: UITableViewCell, obj: NSObject) -> Void in

        var customCell = cell as! ManageTableViewCell

        let snap = obj as! FDataSnapshot

        customCell.label99.text = snap.key as String
    }
person dylankbuckley    schedule 12.03.2016