因此,我正在学习如何使用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()
citiesArray
是nil
。真的?!?但是,如果您尝试调用addObject
方法并且citiesArray
是nil
,则可能会收到一个致命错误:“在展开一个可选值时意外地找到nil”。因此,如果
citiesArray
是nil
,那么jsonArray
也必须为空。或由于某种原因,您甚至没有进入此循环。我建议(a)记录jsonArray
; (b)在此循环中记录或放置断点,并确认您甚至以自己的想法进入此处。另外,请检查时间安排(即确保您的记录
citiesArray
的语句实际上是在填充它的该例程之后进行的)。我知道这听起来很疯狂,但是如果您异步地从某些网络资源中检索数据,则可能会遇到一些与计时相关的问题。 var citiesArray: [City]!
并使用以下方法实例化它:
citiesArray = [City]()
并使用以下命令添加对象:
citiesArray.append(city)
关于arrays - swift 的addObject,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26766654/