【问题标题】:NSObject does not have a member named Key errorNSObject 没有名为 Key 的成员错误
【发布时间】:2015-02-26 10:07:24
【问题描述】:

我需要构造如下所示格式的 JSON 对象。

{
  "DeviceCredentials": {
    "UniqueId": "sample string 1"
  },
  "Handovers": [
    {
      "Occasions": [
        {
          "Id": 1
        },
        {
          "Id": 1
        }
      ]
    }
  ]
}

虽然Occasions 数组存在问题。 Occasion 对象的数量各不相同。有时可能只有一个场合,有时可能有多个。由于这是动态的,我编写了下面的方法来创建这个数组。

func getOccasionArray(handover: Handover) -> JSON {
    var occArray = [[String: NSNumber]]()
    for occ in handover.occasions {
        let occasion = occ as Occasion
        var obj = ["Id": occasion.id!]
        occArray.append(obj)
    }
    let json = JSON(occArray)
    return json
}

我使用SwiftyJSON 库将创建的数组转换为 JSON。这是 json 变量的返回结果,看起来像是只有一个 Occasion 的 Handover。

[
  {
    "Id" : 243468
  }
]

到目前为止一切顺利。问题是我无法将其插入更大的 JSON 响应。像这样简单地调用方法会给出错误 'NSObject' does not have a member named 'Key'

var parameters = [String: NSObject]()

parameters = [
    "DeviceCredentials": [
        "UniqueId": "1212121212"
    ],
    "Handovers": [
        [
            "Occasions": getOccasionArray(handover)
        ]
    ]
]

我尝试将返回值转换为数组getOccasionArray(handover).arrayValue,但没有任何变化。

知道如何解决这个问题吗?

谢谢。

【问题讨论】:

    标签: ios arrays json swift swifty-json


    【解决方案1】:

    那么这里就不需要 SwiftyJSON:

    让你的 'getOc​​casionArray' 返回一个 [String: NSObject]

    func getOccasionArray(handover: Handover) -> [String: NSObject] {
      var occArray = [[String: NSNumber]]()
      for occ in handover.occasions {
        let occasion = occ as Occasion
        var obj = ["Id": occasion.id!]
        occArray.append(obj)
      }
      return occArray
    }
    

    定义参数为[String: NSObject]:

    var parameters = [[String: NSObject]]()
    
    var json: [String: NSObject] = getOccasionArray(handover)        
    
    parameters = [["DeviceCredentials": ["UniqueId": "1212121212"], "Handovers": ["Occasions": json]]]
    

    【讨论】:

    • 不幸的是,我不能将parameters 变量的类型设为JSON。您会看到我需要将此 JSON 对象作为 URL 请求的参数传递。我使用 Alamofire 进行 HTTP 请求处理,它只接受 [String: AnyObject] 格式的参数。
    • 哦,好的,如果您将其保留为: [String: NSObject] 只要您更改 getOc​​casionArray 以返回它,它可能应该可以工作。在这种情况下,您可以远离 swiftyJSON。我编辑了上面的帖子
    • 谢谢。那行得通!虽然我不得不将getOccasionArray 方法的返回类型更改为[[String: NSObject]] 并将occArray 的类型更改为[[String: NSObject]]()。现在一切正常。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多