我正在尝试开发一个只有值数组的UIPickerView
。所以我将有一个Dictionary(场所)来存储来自json的key和value以及一个只存储它的Array(venueValue)使用venueValue我可以在UIPickerView.But中显示结果,我想要用户从picker中选择的值的键。不幸的是,我想到如何从我的中获取Dictionary(key:value)和Array(key) json.Any Help?
var venue = [String:String]()
var venueValue = [String]()
var selectedValue : String? // to show in text box after picker selected and to get key of selected value from venue
func populateVenues(completion : (error: NSError?,value : [String]?,dict : [String:String]) -> Void){
var request = NSMutableURLRequest(URL: NSURL(string: "http://localhost:8080/xxx/xxx/xxx")!)
var session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"
var err: NSError?
let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
println("Auction : Request Completed")
var err: NSError?
if error == nil{
var venues = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as! NSDictionary
for (k, v) in venues {
if let value = v as? [String] {
println(value)
// Acutally value should start from "All Venue".I wonder why it start at "ZeroCentral",Please check my output.
self.venueValue.append(value[0])
}
}
//I still dont get the dictionary yet.how to change NSDictionary to Dictionary
// What i want is to store value in venueValue and to store both key and value in venue because when the picker can only store array.So i gonna get the selected value from picker and get the key of selected value from dictionary(venue)
completion(error: nil,value: venueValue,dict:venues)
}
else{
println(error.localizedDescription)
}
if(err != nil) {
// If there is an error parsing JSON, print it to the console
println("JSON Error \(err!.localizedDescription)")
}
})
task.resume()
}
这是我的场地输出。
{
0 = (
"All Venues"
);
"100_152" = (
"ORIX Fukuoka"
);
"101_164" = (
"ORIX IP Stock"
);
"102_131" = (
"ORIX Kobe"
);
"103_135" = (
"ORIX Nagoya"
);
"104_132" = (
"ORIX Sendai"
);
"105_54" = (
"SAA Hamamatsu"
);
"106_29" = (
"SAA Sapporo"
);
"107_184" = (
Sakura
);
}
我尝试输出的venueValue没有像场地输出那样排序
[ORIX Nagoya]
[ORIX IP Stock]
[ORIX Kobe]
[All Venues]
[ORIX Fukuoka]
…...
为什么它不像旧的?如果我想从#34;所有场地开始",如何做到这一点?任何帮助?请我接近答案。
答案 0 :(得分:0)
像这样创建两个数组。
var venueId = [String]()
var venueValue = [String]()
var selectedValue : String?
func populateVenues(completion : (error: NSError?,results : [String]?,keys : [String]) -> Void){
var request = NSMutableURLRequest(URL: NSURL(string: "http://localhost:8080/xxx/xxx/xxx")!)
var session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"
var err: NSError?
let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
println("Auction : Request Completed")
var err: NSError?
if error == nil{
var venues = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as! [String: AnyObject]
for (k, v) in venues {
println("key is : \(k).Value is : \(v)")
// This is where I start having trouble.
// I want to append k to venueId and v to venueValue
venueId.append(k)
if let value = v as? Array[String] {
venueValue.append(value[0])
}
}
completion(error: nil,results: self.venueId,keys:self.venueValue!)
}
else{
println(error.localizedDescription)
}
if(err != nil) {
// If there is an error parsing JSON, print it to the console
println("JSON Error \(err!.localizedDescription)")
}
})
task.resume()
}
答案 1 :(得分:0)
从你的场地输出看起来,每个字典中的值都是一个包含1个元素的数组。
您需要提取该单个项目。
实际上,您需要将字典值转换为[String]类型,然后提取第一个元素。
看起来@ Aimit89设置了他的代码来处理你正在获得的数据。