Таблица Apple Watch — первые 4 строки не отображаются

У меня возникают проблемы с добавлением строк в WKInterfaceTable на Apple Watch. Странно то, что независимо от того, что я делаю, первые 4 строки отображаются как пустые. Я пробовал добавлять строки вручную и в цикле - не имеет значения. Я считаю, что мой код хорош, потому что 5-я и последующие строки выглядят нормально. Вот что происходит:

пустые строки

Прокрутите дальше:

введите здесь описание изображения

Мой код:

import Foundation
import WatchKit

class TableInterfaceController: WKInterfaceController{

    @IBOutlet weak var agentTable: WKInterfaceTable!

    let agents = ["The Dude","Walter","Donnie","Maude","Knox","Karl","Nihilist 2"]

    override init(){
        super.init()
        loadTableData()
    }


    private func loadTableData(){
        agentTable.setNumberOfRows(agents.count, withRowType: "AgentTableRowController")
        println("Count: \(agents.count)")

        for(index,agentName) in enumerate(agents){
            let row = agentTable.rowControllerAtIndex(index) as AgentTableRowController
            println(agentName, index)
            row.agentLabel.setText(agentName)
        }
    }
}

Любая помощь приветствуется. Наверное, это что-то банальное. Я использую Xcode 6.2 (6C131e) на Yosemite 10.10.2.


person gh0st    schedule 19.03.2015    source источник
comment
Метки в AgentTableRowController установлены на что-то отличное от нуля? Я знаю, что несколько раз, когда я пытался заполнить строки таблицы, выходы иногда случайным образом обнулялись.   -  person prawn    schedule 19.03.2015
comment
Если бы это было nil, приложение вышло бы из строя при доступе к свойству agentLabel в строке.   -  person gh0st    schedule 19.03.2015
comment
Попробуйте вызвать loadTableData() в методе willActivate()   -  person dan    schedule 19.03.2015
comment
Работал как шарм!! Опубликуйте это как ответ, и я отмечу его.   -  person gh0st    schedule 19.03.2015
comment
я получаю те же результаты, но только в симуляторе и только тогда, когда таблица находится на второй или более поздней странице выгружаемого интерфейса. таблица на первой странице отлично работает в симуляторе, и все таблицы в порядке на реальном оборудовании. обратите внимание, что willActivate() также будет вызываться при возврате из меню принудительного касания.   -  person bunnyhero    schedule 29.05.2015
comment
я должен уточнить, что, получая те же результаты, я имею в виду, что у меня та же ошибка, что и в исходном вопросе.   -  person bunnyhero    schedule 29.05.2015


Ответы (2)


У меня была точно такая же проблема при инициализации моей таблицы в awakeWithContext. Переместив инициализацию моей таблицы в willActivate, как предложил Дэн, проблема была решена.

Я просмотрел документацию как WKInterfaceController, так и WKInterfaceTable, и они предполагают, что вы должны выполнять инициализацию в init или awakeWithContext, поэтому я считаю, что это ошибка в структуре WatchKit.

person bengoesboom    schedule 01.05.2015

Может быть, попробовать с индексированным циклом for?

for var i=0; i<agents.count; i++ {
   let row = agentTable.rowControllerAtIndex(i) as AgentTableRowController
        println(agents[i], i)
        row.agentLabel.setText(agents[i])
}

Надеюсь, это сработает для вас.

person Tim    schedule 19.03.2015
comment
Никаких игральных костей, я даже пробовал это: `let row = agentTable.rowControllerAtIndex(0) as AgentTableRowController row.agentLabel.setText(Agent1)` Ничего не работает. - person gh0st; 19.03.2015
comment
Agents.count дает вам правильное значение, если вы печатаете его в init ()? - person Tim; 19.03.2015
comment
да все тип-топ. все индексы, значения печатаются правильно. Первые 4 строки просто не заполнены. Возможно, это ошибка. - person gh0st; 19.03.2015
comment
если пусть row = agentTable.rowControllerAtIndex(i) как? AgentTableRowController {строка.agentLabel.setText(агенты[i]) }. Попробуй это - person Tim; 19.03.2015