因此,我正在学习如何使用JSON从数据库获取数据,然后将数据放在某个数组中。当我需要将对象citiesArray.addObject(City())(id,名称,状态等)中的所有数据放入数组时,问题在最后一行city上发生。
我一直在逐行查看编译器,基本上一切都很好,只不过最后我的数组仍然为空(其值为nil)?

for (var i=0;i<jsonArray.count;i++){
    //Create city objec
    var cID: AnyObject? = jsonArray.objectAtIndex(i).objectForKey("id") as NSString
    var cName: AnyObject? = jsonArray.objectAtIndex(i).objectForKey("cityName") as NSString
    var cState: AnyObject? = jsonArray.objectAtIndex(i).objectForKey("cityState") as NSString
    var cPopulation: AnyObject? = jsonArray.objectAtIndex(i).objectForKey("cityPopulation") as NSString
    var cCountry: AnyObject? = jsonArray.objectAtIndex(i).objectForKey("country") as NSString

    //add city obj (i have City class) to city array
    var city = City()

    city.cityID = cID as NSString
    city.cityName = cName as NSString
    city.cityState = cState as NSString
    city.cityPopulation = cPopulation as NSString
    city.cityCountry = cCountry as NSString

    citiesArray.addObject(City())
}

最佳答案

几个问题:

  • 您建议您尝试使用以下代码行添加城市:
    citiesArray.addObject(City())
    
    City()构造将实例化一个新的空白City对象。因此,在最佳情况下,该行代码会将一个空白的City对象添加到您的数组中,这不是您想要的。

    city添加到citiesArray时,您应该只需:
    citiesArray.addObject(city)
    
  • 您说您已经定义了citiesArray,如下所示:
    var citiesArray: NSMutableArray!
    

    您还需要实例化此变量的对象(即创建该变量现在指向的对象),例如:
    citiesArray = NSMutableArray()
    
  • 不过,您要报告的是,在此循环结束时,citiesArraynil。真的?!?但是,如果您尝试调用addObject方法并且citiesArraynil,则可能会收到一个致命错误:“在展开一个可选值时意外地找到nil”。

    因此,如果citiesArraynil,那么jsonArray也必须为空。或由于某种原因,您甚至没有进入此循环。我建议(a)记录jsonArray; (b)在此循环中记录或放置断点,并确认您甚至以自己的想法进入此处。

    另外,请检查时间安排(即确保您的记录citiesArray的语句实际上是在填充它的该例程之后进行的)。我知道这听起来很疯狂,但是如果您异步地从某些网络资源中检索数据,则可能会遇到一些与计时相关的问题。
  • 由于您正在编写Swift代码,因此您可以考虑使用Swift数组。例如,将您的数组变量定义为
    var citiesArray: [City]!
    

    并使用以下方法实例化它:
    citiesArray = [City]()
    

    并使用以下命令添加对象:
    citiesArray.append(city)
    
  • 关于arrays - swift 的addObject,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26766654/

    10-10 14:28