Я только что обновил до xCode Version 8.0 (8A218a). Я пытаюсь преобразовать старый код в Swift 3.0, и я изо всех сил пытаюсь понять, как исправить некоторые проблемы с помощью tableView, и я смущен документацией и некоторыми ошибками, которые я получаю.Каков правильный синтаксис для функций tableView в Swift 3? xCode 8 issues
Я получаю эту ошибку
*** Illegal источник NSTableView данных(). Необходимо реализовать numberOfRowsInTableView: и Tableview: objectValueForTableColumn: строка:
При выполнении этого кода:
class listMusicEvents: ViewController, performanceDataModelDelegate, NSTableViewDelegate, NSTableViewDataSource {
let eventModel = performanceDataModel.sharedInstance
var musicEvents:[performanceEvent] = []
@IBOutlet var tableView: NSTableView!
override func viewDidLoad() {
super.viewDidLoad()
eventModel.delegate = self
tableView.delegate = self
eventModel.getPerformanceEvents()
}
func performanceEventsLoaded() {
musicEvents = eventModel.eventList
print(musicEvents[0].eventTitle)
}
func performanceSaveError(headline: String, message: String, error: NSError) {
print(error)
}
func numberOfRowsInTableView(in tableView: NSTableView) -> Int {
return musicEvents.count
}
func tableView(_tableView:NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> AnyObject{
if tableColumn?.title == "Date" {
let date = musicEvents[row].eventDate
return date as AnyObject
} else {
let title = musicEvents[row].eventTitle
return title as AnyObject
}
}
}
Я думал, что я реализовал новые методы, но это выглядит, как я не понимая что-то основное.
Я получаю предупреждение о функции objectValueFor:
метод Instance 'Tableview (Tableview: objectValueForRow: строка :)' почти матчи факультативное требование «Tableview (: setObjectValue: для: строки:) из протокола «NSTableViewDataSource»
Я смотрел на делегат документы, и они говорят setObjectValue не должно использоваться для просмотра на основе Tableview, который является то, что у меня есть (я думаю).
Кода я использовал первоначально для столбца таблицы был:
tableView(tableView: NSTableView, objectValueForTableColumn tableColumn: NSTableColumn?, row: Int) -> AnyObject? { . . .
Эта линия работала отлично перед засаливанием проекта в Xcode 8
Может кто-то пожалуйста, объясните, как вид на основе tableViews должны работать со Swift 3 и что я ошибаюсь? Любая помощь очень ценится.
Просто позвольте Xcode автоматически завершить его для вас. Попробуйте Any, а не AnyObject –
У меня есть усталость, позволяющая автомонтажу. Я могу избавиться от предупреждения, которое нравится в версии xCode: 'tableView (_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn ?, row: Int) -> Any?' Тем не менее, я все еще получаю ошибку нелегального источника данных. Я тщательно проверил инспектор подключений, очистил проект и т. Д. –
Я проверил его на реальном проекте https://www.dropbox.com/s/88zszm4byjqvzld/Screen%20Shot%202016-09-30%20at% 2010.51.57% 20 AM.png? Dl = 0 Итак, вы можете видеть, что ошибок нет. –