2016-02-24 4 views
0

В принципе, он передает массив в порядке. Это просто, когда вы пытаетесь использовать перечисляемый массив как tablerows, он говорит, что nil найден.Как заполнить строки таблицы, используя массив [String], отправленный с iPhone через Watch Connectivity?

ТЕЛЕФОН

import UIKit 
import WatchConnectivity 

class ViewController: UIViewController, WCSessionDelegate { 

    @IBOutlet weak var sendButton: UIButton! 

    var watchSession: WCSession? 
    var arrayCustom = ["thing1", "thing2"] 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     if(WCSession.isSupported()) { 
      watchSession = WCSession.defaultSession() 
      watchSession?.delegate = self 
      watchSession?.activateSession() 
     } 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 


    @IBAction func sendArray(sender: AnyObject) { 
     sendToWatch() 

    } 


    private func sendToWatch() { 
     do { 
      let applicationDict = ["Array1": arrayCustom] 
      try WCSession.defaultSession().updateApplicationContext(applicationDict) 
     } 

     catch { 
      print(error) 
     } 
    } 
} 

WATCHKIT

private func loadThCust() { 

     if (WCSession.isSupported()) { 
      watchSession = WCSession.defaultSession() 
      watchSession.delegate = self; 
      watchSession.activateSession()] 
     } 

func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) { 

     dispatch_async(dispatch_get_main_queue()) {() -> Void in 

      if let retrievedArray1 = applicationContext["Array1"] as? [String] { 
       self.custArray = retrievedArray1 
       print(self.custArray) 
      } 
      for (index, thName) in self.custArray.enumerate() { 
       let row2 = self.choiceTable.rowControllerAtIndex(index) as! ChoiceTableRowController 
       row2.choiceLabel.setText(thName) 
       } 
      } 
     } 

Моя проблема я получаю эту консольную выход + ошибку всякий раз, когда я пытаюсь и загрузить TableView:

["thing1", "thing2"] 
2016-02-24 03:21:25.912 WristaRoo WatchKit Extension[9401:243561] Error - attempt to ask for row 0. Valid range is 0..0 
fatal error: unexpectedly found nil while unwrapping an Optional value 

Кто-нибудь есть любая идея, почему разворачиваемая стоимость по-прежнему равна нулю? Я надеялся, что как только я его установлю и увижу, что в массиве [String] есть значения, он может перечислить его, но кажется, что они просто невидимы.

ответ

2

Вы задали вопрос с утверждением: «В принципе, он передает массив в порядке», поэтому это не проблема с подключением к часам.

Вы просто не указали количество строк для choiceTable перед повторением через ваш массив.

choiceTable.setNumberOfRows(custArray.count, withRowType: "ChoiceTableRowController") 

Определение проблемы с выхода консоли:

  • ошибка - попытка попросить строки 0. Допустимый диапазон значений 0..0

    rowControllerAtIndex: возвращает (Факультативный который is) nil, когда его индекс выходит за пределы.

    The row controller object, or nil if there are no row controllers yet or index is out of bounds.

    Вы пытались получить доступ к строке, которая не существует, что приводит к предупреждению границ.

  • фатальная ошибка: неожиданно нашли ноль в то время как разворачивание необязательное значение

    row2.choiceLabel.setText(thName) 
    

    row2 равна нулю.

Вы должны иметь возможность легко отслеживать такие ошибки в отладчике. Если вы исследовали row2 и видели, что это было ноль, вы поймете, что проблема не в том, что он сам, но в таблице нет строк.

+0

ugh, спасибо за tis - кодирование в 3 утра - это не всегда лучший вариант. это tok мне все 5 минут, чтобы добавить в 'self.choiceTable.setNumberOfRows (self.custArray.count, withRowType:« ChoiceTableRowController »)' , чтобы заставить его работать – conedmiro