从Dictionary for Table获取数据

时间:2015-09-29 18:45:02

标签: ios swift uitableview nsdictionary watchkit

我有一个WatchKit table,我需要填充我收到的数据(从iOS到WatchKit)。我无法弄明白如何打开Dictionary中的数据以便在table 中使用。

我在WatchKit中有数据 InterfaceController。swift

func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject]) {

    let dic3 = userInfo["TColor"] as? String
    let dic4 = userInfo["Match"] as? String

    dispatch_async(dispatch_get_main_queue()) {
        //
    }
}

WatchKit Event。swift (主要对象的子类)

class Event {

var eventTColor:String
var eventMatch:String

init(dataDictionary:Dictionary<String,String>) {
    eventTColor = dataDictionary["TColor"]!
    eventMatch = dataDictionary["Match"]!
}

class func newEvent(dataDictionary:Dictionary<String,String>) -> Event {
    return Event(dataDictionary: dataDictionary)
}

class func eventsList() -> [Event] {

    var array = [Event]()
    let dataPath = // Not sure what to do here

    let data = // Not sure what to do here either

    for e in data as! [Dictionary<String, String>] {
        let event = Event(dataDictionary: e)
        array.append(event)
    }

    return array
}

}

我无法弄清楚我所遗漏的函数class func eventsList() -> [Event]中应该做些什么。

我需要从Dictionary收到的didReceiveUserInfo中获取相关信息。

或者可能有更好/其他方法来解决这个问题?将根据需要发布任何额外的代码。

编辑:这是我到目前为止didFInishUserInfoTransfer尝试的内容

func session(session: WCSession, didFinishUserInfoTransfer userInfoTransfer: WCSessionUserInfoTransfer, error: NSError?) {
        if let someError = error {
            print("error on didFinishUserInfoTransfer: %@", someError)
        } else {
            let eventsList = Event.eventsListFromValues(receivedData)
            NSLog("Events List: %@", eventsList)

        }
    }

func doTable(){

eventsListSO = Event.eventsListFromValues(receivedData)
rowTable.setNumberOfRows(eventsListSO.count, withRowType: "rows")
NSLog("Row count: %@", eventsListSO.count)

for var i = 0; i < self.rowTable.numberOfRows; i++ {
    let row = rowTable.rowControllerAtIndex(i) as? TableRowController
    print("Row")
    for eventm in eventsListSO {
        row!.mLabel.setText(eventm.eventMatch)
        NSLog("SetupTableM: %@", eventm.eventMatch)
    }
}

}

1 个答案:

答案 0 :(得分:1)

从发布的代码中看起来有点难以辨别,但看起来InterfaceController正在String中以{userInfo个值的形式接收单个事件的数据1}}字典参数。大概如果你期待一个列表,这个方法会被多次调用。

如果以上情况属实,那么在var类型InterfaceController(或等效Array<Dictionary<String,String>>}中创建[[String : String]]属性可能是有意义的,我个人认为不太可读),如此:

var receivedData = Array<Dictionary<String, String>>()

然后在session:didReceiveUserInfo:的实现中,您将内容附加到receivedData属性,如下所示:

func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject]) {
    if let tColorValue = userInfo["TColor"] as? String, let matchValue = userInfo["Match"] as? String {
        receivedData.append(["TColor": tColorValue, "Match": matchValue])
    }
    else {
        // Appropriate error handling here
    }
}

然后,您需要更改eventsList方法以接受Dictionary个值并对其进行处理,或许是这样:

class func eventsListFromValues(values: Array<Dictionary<String, String>>) -> Array<Event> {
    var array = Array<Event>()

    for eventValues in values {
        let event = Event(dataDictionary: eventValues)
        array.append(event)
    }

    return array
}

有了这些东西,您现在拥有了一组数据值,您需要确定何时构建Array Eventsession:didReceiveUserInfo:个对象的适当时间。也许在每次调用let eventsList = Event.eventsListFromValues(receivedData) for event in eventList { // Do something with the events list (i.e., use event.eventTColor and event.eventMatch) } 之后都会使用如下代码:

        if (payment.value){
      switch (payment.value) {
          case 'Credit Card'
            cost = cost + (cost * 0.2);
            break;
          case 'Gold Bullion'
            cost = cost + (cost * 0.5);
            break;
          default: cost;
      }

<label for="type">Payment Method</label> <select name="payment" id="payment" required>
      <option value="DC">Debit Card</option>
      <option value="CC">Credit Card</option>
      <option value="Cash">Cash</option>
      <option value="GB">Gold Bullion</option>
  </select>

显然,我的答案基于对某些事情的一些假设,因此对于你所做的事情可能并不正确,但希望能让你朝着正确的方向前进。此外,我编写此代码时没有编译器,因此可能需要一些小的调整。