NSMutableDictionary复制每个插入索引中最后插入的索引,而不是插入新索引

时间:2016-06-06 14:26:29

标签: ios iphone swift swift2 nsmutabledictionary

我已经谷歌搜索了一段时间,试图找到我的问题的解决方案,并在此结束。我试图创建一个字典字典来加载tableViewCells中的所有数据。 所以我需要一个键,用于" name"," description"的另一个键,"图像名称"的另一个键。并且喜欢这个..

我正在进行异步调用,因此我创建了一个全局变量nsDict,它是NSMutableDictionary并且在异步parseJson函数I'我创建了另一个名为jsonValues的NSMutableDictionary。 我使用jsonValues将数据存储在循环中。数据也与密钥一起存储:

jsonValues["name"] = Name

在循环结束时,我将jsonValues存储在我的NSMutableDictionary全局变量nsDict中。

nsDict.setObject(jsonValues, forKey: c)
c += 1

此时已经有人知道我的问题和我的错误。但我一直在尝试并阅读大量的stackoverflow,并没有找到方法做一些简单的事情。

我的字典被所有jsonValues填充,但不是插入不同的值,而是复制所有这些值。也就是说,在循环的第一轮中,它插入第一个值(值的字典)。在第二个循环中,它在第一个和第二个索引中插入第二个值字典... 最后我得到了43个相同的词典。所有这些都是最后一个的副本......

有人知道为什么吗?我在这个问题上花了两个小时。非常感谢一些帮助,谢谢!

    private func parseJson(json : NSMutableArray, tableView : UITableView){
        var jsonValues = NSMutableDictionary()
        nsDict.removeAllObjects()
        nsDict = NSMutableDictionary.init(capacity: 10)
        var c : Int = 0
        for j in json {
            var nsData : NSMutableDictionary
            //clean array
//            jsonValues.removeAll()

            //Create main value
            guard let value = j.valueForKey("value")?.valueForKey("value")! else{
                return
            }

            //Get name
            guard let Name : String = (value.valueForKey("Name")?.valueForKey("en") as? String) else {
                return
            }

            jsonValues["name"] = Name

            title = "Address: "

            //Get Address
            if let Address = value.valueForKey("Address")?.valueForKey("en") as? String{
                jsonValues["Address"] = Address
            }

            title = "Country: "

            //Get country
            if let country = geoposition.valueForKey("country") as? String{
                let fCountry = title+country
                jsonValues["Country"] = fCountry
            }else{}

            nsDict.setObject(jsonValues, forKey: c)
            c += 1
        }

        doTableRefresh(tableView);


    }

2 个答案:

答案 0 :(得分:1)

只需移动你的var jsonValues = NSMutableDictionary()内圈

答案 1 :(得分:0)

您创建一个NSMutableDictionary并重复插入它。插入对象,而不是其内容。因此,每个条目包含相同的对象。您需要在每个索引处插入一个新对象。