NSMutableDictionary 在每个插入索引中复制最后插入的索引,而不是插入新索引
NSMutableDictionary replicates the last inserted index in each inserted index instead of insert the new index
我在谷歌上搜索了一段时间,试图找到解决我的问题的方法,但到此为止。我正在尝试创建一个字典的字典来加载 tableViewCells 中的所有数据。
所以我需要 "name" 的一把钥匙,"description" 的另一个钥匙,"image name" 的另一个钥匙,像这样......
我正在进行异步调用,所以我创建了一个全局变量 nsDict
,它是一个 NSMutableDictionary
,在异步 parseJson
函数中我创建了另一个 NSMutableDictionary
命名为jsonValues。
我使用 jsonValues 将数据存储在循环内。数据也用键存储:
jsonValues["name"] = Name
在循环结束时,我将 jsonValues 存储在 nsDict 中,这是我的 NSMutableDictionary 全局变量。
nsDict.setObject(jsonValues, forKey: c)
c += 1
此时已经有人确定我的问题和我的错误。但是我一直在尝试并阅读了大量的 Whosebug,但没有找到做那么简单的事情的方法。
我的字典被所有 jsonValue 填满,但它没有插入不同的值,而是复制了所有这些值。也就是说,在第一轮循环中,它插入第一个值(值字典)。在第二个循环中,它在第一个和第二个索引中插入第二个值字典......
最后我得到了 43 本相同的词典。都是上一个的copy...
有人知道为什么吗?我在这个问题上花了两个小时。非常感谢一些帮助,谢谢!
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);
}
您创建一个 NSMutableDictionary 并重复插入它。插入的是 object,而不是它的内容。因此每个条目包含相同的 object。您需要在每个索引处插入一个新对象。
只需将您的 var jsonValues = NSMutableDictionary()
移入循环
我在谷歌上搜索了一段时间,试图找到解决我的问题的方法,但到此为止。我正在尝试创建一个字典的字典来加载 tableViewCells 中的所有数据。 所以我需要 "name" 的一把钥匙,"description" 的另一个钥匙,"image name" 的另一个钥匙,像这样......
我正在进行异步调用,所以我创建了一个全局变量 nsDict
,它是一个 NSMutableDictionary
,在异步 parseJson
函数中我创建了另一个 NSMutableDictionary
命名为jsonValues。
我使用 jsonValues 将数据存储在循环内。数据也用键存储:
jsonValues["name"] = Name
在循环结束时,我将 jsonValues 存储在 nsDict 中,这是我的 NSMutableDictionary 全局变量。
nsDict.setObject(jsonValues, forKey: c)
c += 1
此时已经有人确定我的问题和我的错误。但是我一直在尝试并阅读了大量的 Whosebug,但没有找到做那么简单的事情的方法。
我的字典被所有 jsonValue 填满,但它没有插入不同的值,而是复制了所有这些值。也就是说,在第一轮循环中,它插入第一个值(值字典)。在第二个循环中,它在第一个和第二个索引中插入第二个值字典...... 最后我得到了 43 本相同的词典。都是上一个的copy...
有人知道为什么吗?我在这个问题上花了两个小时。非常感谢一些帮助,谢谢!
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);
}
您创建一个 NSMutableDictionary 并重复插入它。插入的是 object,而不是它的内容。因此每个条目包含相同的 object。您需要在每个索引处插入一个新对象。
只需将您的 var jsonValues = NSMutableDictionary()
移入循环