swift for循环没有循环足够的次数

时间:2016-09-09 14:26:44

标签: ios swift loops

我的应用程序中有一个tableView,当我加载应用程序时,我希望视图中填充一系列狗(从服务器检索)。

我有这个工作,但它只会从服务器加载列表中的第一只狗。

这里的代码从它从服务器序列化JSON响应开始

do {
            let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as! [AnyObject]
            dispatch_async(dispatch_get_main_queue(), {
                self.tableView.beginUpdates()
            if let theDogs = json[0] as? [[String: AnyObject]] {
                for dog in theDogs {
                    print("Dog")
                    if let ID = dog["ID"] as? String {
                        print(ID + " Safe")
                        let thisDog = Dog(name: (dog["Name"] as? String)!, surname: (dog["Surname"] as? String)!, id: (dog["ID"]  as? String)!, boarding: true)
                        let newIndexPath = NSIndexPath(forRow: self.dogs.count, inSection: 0)

                            // code here
                        self.dogs.append(thisDog)
                        self.tableView.insertRowsAtIndexPaths([newIndexPath], withRowAnimation: .Bottom)


                    }
                }
            }
                self.tableView.endUpdates()
            })
        } catch {
            print("error serializing JSON: \(error)")
        }

这是日志的副本(包括来自服务器的打印响应)

Optional([[{"ID":"47","Name":"Sparky","Surname":"McAllister"}],
[{"ID":"31","Name":"Maddie","Surname":"Crawford"}]])
Dog
47 Safe
从日志中可以看出,此列表中有2只狗。 如果循环正常,我希望在日志中看到Dog两次打印,如果它到达创建新31 Safe对象的代码部分,则Dog

我无法弄清楚我做错了什么,有人能看到我的问题吗?

感谢

2 个答案:

答案 0 :(得分:1)

因为JSON是一个包含一个字典的数组数组,当你调用if let theDogs = json[0]时,你会得到这部分JSON:[{"ID":"47","Name":"Sparky","Surname":"McAllister"}]
您需要调用if let theDogs = json[1]来获取JSON的这一部分:

[{"ID":"31","Name":"Maddie","Surname":"Crawford"}]

答案 1 :(得分:1)

好的,多亏了特拉维斯的回答,我能够看到我哪里出错了。我只是对他的建议进行了一些调整,所以我发帖作为答案。

正如特拉维斯所说,我需要访问json[1],但我可以在该列表中拥有7只不同的狗!

所以我做了以下更改:

 if let theDogs = json[0] as? [[String: AnyObject]] {

现在是:      如果让theDogs = json为? [[AnyObject]] {

这意味着在for循环中我正在访问根数组。

然后我改变了for循环:

for dog in theDogs{

于:     for theDogs中的aDog {     让狗= aDog [0]

这意味着对于theDogs中的每个数组,我将获得数组中唯一的对象并将其称为dog。 问题解决了,未来证明了。

感谢所有帮助过的人!