【问题标题】:AnyObject? does not have a member named 'objectAtIndex'任何对象?没有名为“objectAtIndex”的成员
【发布时间】:2014-08-22 07:27:58
【问题描述】:

如果尝试获取字符串对象,则会在 (Xcode6 BETA 6) 上出错:

let jsonString : String = "[{\"name\":[\"Fred\",\"John\"],\"age\":21},{\"name\":\"Bob\",\"age\":35}]"

let myData:NSData? = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)

var jsonResult:NSArray = NSJSONSerialization.JSONObjectWithData(myData!, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSArray

println(jsonResult.objectAtIndex(0).objectForKey("name").objectAtIndex(0))

print 永远不会被调用,导致错误。有人有想法吗?

【问题讨论】:

  • 它使用 Xcode6 beta5 打印“Fred”。没有错误或崩溃
  • Xcode6 BETA 6 崩溃!

标签: swift xcode6-beta6


【解决方案1】:

从 NSDictionary 或 NSArray 获取值返回 AnyObject 对象。因此,您应该将类​​型转换为适当的类型。试试这个

println(((jsonResult.objectAtIndex(0) as NSDictionary).objectForKey("name") as NSArray).objectAtIndex(0))

【讨论】:

    【解决方案2】:

    另一种选择是将jsonResult 转换为Array<AnyObject> 并使用subscript 语法来获取必要的值

    let jsonString : String = "[{\"name\":[\"Fred\",\"John\"],\"age\":21},{\"name\":\"Bob\",\"age\":35}]"
    let myData:NSData? = jsonString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)
    var jsonResult: AnyObject = NSJSONSerialization.JSONObjectWithData(myData!, options: NSJSONReadingOptions.MutableContainers, error: nil);
    
    if let lJsonArray = jsonResult as? Array<AnyObject> {
        println(lJsonArray[0].objectForKey("name")[0])
    }
    

    【讨论】:

      【解决方案3】:

      我建议创建一个或多个类并反序列化该 JSON,以便更好地访问数据并避免访问时出错。

      顺便说一下,通过使数据类型更明确,它可以工作:

      let dict = jsonResult.objectAtIndex(0) as NSDictionary
      let array = dict["name"] as NSArray
      
      println(array.objectAtIndex(0))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 2017-12-21
        • 2020-02-03
        • 1970-01-01
        • 2015-05-23
        相关资源
        最近更新 更多