Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何解析为另一个url提供更多数据的json数据_Ios_Json_Parsing_Swift3_Uicollectionview - Fatal编程技术网

Ios 如何解析为另一个url提供更多数据的json数据

Ios 如何解析为另一个url提供更多数据的json数据,ios,json,parsing,swift3,uicollectionview,Ios,Json,Parsing,Swift3,Uicollectionview,我有点困惑,我该如何解析一个json API,它给了我20个对象,但又给了我一个“下一步”键,该键有一个url,它给了我另外20个对象。我在用这个。它给我4个键:计数、上一个、结果和下一个。我试图在集合视图中显示它们,但不是同时显示所有。当集合视图向下滚动时,我想加载更多 我现在只是想知道名字。这就是我的代码的样子 我让它加载集合视图中的前20个口袋妖怪。然而,我不知道如何加载下一个20口袋妖怪或20后。如果链接不起作用,json文件就是这样的 如果您能提供任何帮助,我将不胜感激。:)

我有点困惑,我该如何解析一个json API,它给了我20个对象,但又给了我一个“下一步”键,该键有一个url,它给了我另外20个对象。我在用这个。它给我4个键:计数、上一个、结果下一个。我试图在集合视图中显示它们,但不是同时显示所有。当集合视图向下滚动时,我想加载更多

我现在只是想知道名字。这就是我的代码的样子

我让它加载集合视图中的前20个口袋妖怪。然而,我不知道如何加载下一个20口袋妖怪或20后。如果链接不起作用,json文件就是这样的


如果您能提供任何帮助,我将不胜感激。:)

您可以尝试使用递归函数重用
loadPokemonsData
函数,如下所示:

func loadPokemonsData(url: String, quantity: Int?) {
    let request = URLRequest(url: URL(string: url)!)

    let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
        if error != nil {
            print(error!)
        }


        do {
            let jsonResults = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! NSDictionary

            let pokemonArray = jsonResults.value(forKey: "results") as! [[String: Any]]

            var isPokemonsEqualsToQuantity: Bool = false

            for pokemonData in pokemonArray {

                if let quantity = quantity {
                    guard self.pokemons.count < quantity else {
                        isPokemonsEqualsToQuantity = true
                        break
                    }
                }

                guard let name = pokemonData["name"] as? String else {
                    return
                }

                self.pokemon = Pokemon(name: name)
                self.pokemons.append(self.pokemon)
            }



            guard let nextURL = jsonResults.value(forKey: "next") as? String, !isPokemonsEqualsToQuantity else {
                for pokemon in self.pokemons {
                    print(pokemon.name)

                }
                print(self.pokemons.count)
                return
            }

            self.loadPokemonsData(url: nextURL, quantity: quantity)




        } catch let err as NSError {
            print(err.localizedDescription)
        }
    }

    task.resume()
}
func loadPokemonsData(url:String,quantity:Int?){
let request=URLRequest(url:url(string:url)!)
让task=URLSession.shared.dataTask(with:request){(data,response,error)在
如果错误!=nil{
打印(错误!)
}
做{
让jsonResults=try JSONSerialization.jsonObject(使用:data!,选项:.mutableContainers)作为!NSDictionary
让pokemonArray=jsonResults.value(forKey:results)作为![[String:Any]]
变量isPokemonsEqualsToQuantity:Bool=false
为pokemonArray中的Pokemonada{
如果让数量=数量{
守卫self.pokemons.count<其他数量{
isPokemonsEqualsToQuantity=true
打破
}
}
guard let name=pokemonda[“name”]as?字符串else{
返回
}
self.pokemon=pokemon(名称:name)
self.pokemons.append(self.pokemon)
}
guard let nextURL=jsonResults.value(forKey:“next”)作为?字符串,!isPokemonsEqualsToQuantity else{
用于self.pokemons中的口袋妖怪{
打印(pokemon.name)
}
打印(self.pokemons.count)
返回
}
self.loadPokemonsData(url:nextur,quantity:quantity)
}以讹传讹{
打印(错误本地化描述)
}
}
task.resume()
}
附加一个运行算法函数的屏幕。。。它可以打印791个口袋妖怪

希望它能帮助你

已编辑

下一次你要求输入密码时请。。。帮助你会更容易

  • 我已经更新了代码来设置你想要的数量(如果你想得到所有的口袋妖怪,则为零),因此它只会按照API返回的顺序得到口袋妖怪,如果你想从所有的口袋妖怪中得到一个特定的口袋妖怪,你可以在得到所有的口袋妖怪后进行排序
您可以尝试使用递归函数重用
loadPokemonsData
函数,如下所示:

func loadPokemonsData(url: String, quantity: Int?) {
    let request = URLRequest(url: URL(string: url)!)

    let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
        if error != nil {
            print(error!)
        }


        do {
            let jsonResults = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! NSDictionary

            let pokemonArray = jsonResults.value(forKey: "results") as! [[String: Any]]

            var isPokemonsEqualsToQuantity: Bool = false

            for pokemonData in pokemonArray {

                if let quantity = quantity {
                    guard self.pokemons.count < quantity else {
                        isPokemonsEqualsToQuantity = true
                        break
                    }
                }

                guard let name = pokemonData["name"] as? String else {
                    return
                }

                self.pokemon = Pokemon(name: name)
                self.pokemons.append(self.pokemon)
            }



            guard let nextURL = jsonResults.value(forKey: "next") as? String, !isPokemonsEqualsToQuantity else {
                for pokemon in self.pokemons {
                    print(pokemon.name)

                }
                print(self.pokemons.count)
                return
            }

            self.loadPokemonsData(url: nextURL, quantity: quantity)




        } catch let err as NSError {
            print(err.localizedDescription)
        }
    }

    task.resume()
}
func loadPokemonsData(url:String,quantity:Int?){
let request=URLRequest(url:url(string:url)!)
让task=URLSession.shared.dataTask(with:request){(data,response,error)在
如果错误!=nil{
打印(错误!)
}
做{
让jsonResults=try JSONSerialization.jsonObject(使用:data!,选项:.mutableContainers)作为!NSDictionary
让pokemonArray=jsonResults.value(forKey:results)作为![[String:Any]]
变量isPokemonsEqualsToQuantity:Bool=false
为pokemonArray中的Pokemonada{
如果让数量=数量{
守卫self.pokemons.count<其他数量{
isPokemonsEqualsToQuantity=true
打破
}
}
guard let name=pokemonda[“name”]as?字符串else{
返回
}
self.pokemon=pokemon(名称:name)
self.pokemons.append(self.pokemon)
}
guard let nextURL=jsonResults.value(forKey:“next”)作为?字符串,!isPokemonsEqualsToQuantity else{
用于self.pokemons中的口袋妖怪{
打印(pokemon.name)
}
打印(self.pokemons.count)
返回
}
self.loadPokemonsData(url:nextur,quantity:quantity)
}以讹传讹{
打印(错误本地化描述)
}
}
task.resume()
}
附加一个运行算法函数的屏幕。。。它可以打印791个口袋妖怪

希望它能帮助你

已编辑

下一次你要求输入密码时请。。。帮助你会更容易

  • 我已经更新了代码来设置你想要的数量(如果你想得到所有的口袋妖怪,则为零),因此它只会按照API返回的顺序得到口袋妖怪,如果你想从所有的口袋妖怪中得到一个特定的口袋妖怪,你可以在得到所有的口袋妖怪后进行排序
请不要发布代码截图,而是复制/粘贴代码。在delegate方法willDisplayCell中,如果它处于某个限制,则使用url获取下一批。对不起,Nayem,新加入stack over flow的人不知道人们喜欢什么屏幕截图或代码。我也是iso开发新手,请给我看一个代码示例。请不要发布代码截图,而是复制/粘贴代码。在delegate方法willDisplayCell中,如果它处于某个限制,则使用url获取下一批。对不起,Nayem,新加入stack over flow的人不知道人们喜欢什么屏幕截图或代码。我也是iso开发的新手,你能给我看一个代码示例吗?谢谢你,圣地亚哥,它很管用。然而,应用程序在运行几次后崩溃,api给了我一个错误。“请求已被阻止。预期可用。”