gpt4 book ai didi

ios - Json Values Append Array 但 ViewDidLoad 看起来是空的

转载 作者:行者123 更新时间:2023-11-28 06:36:12 24 4
gpt4 key购买 nike

我在 iOS 中工作,当我获取 JSON 数据时,我在函数中没有错误地打印它并将它附加到一个字符串数组(我做对了)

但是如果我想稍后到达 String 数组,json 函数看起来是空数组。为了测试,我在按钮操作中打印了数组,然后它对我有用,但我想在 Json 函数结束时在其他函数的字符串数据中使用。

代码:

func getAllDataFromURL()
{
var i : Int = 0;
var urlDatas : [String] = allJsonDatas.getAllTours();
for(i = 0 ; i < allJsonDatas.getAllTours().count ; i += 1)
{
Alamofire.request(.GET, urlDatas[i]).responseJSON
{(response) -> Void in

if let arrivedData = response.result.value
{
print("********")
print(arrivedData["generalTourDistrict"] as! String);
print(arrivedData["otherTourDistrict"] as! String);
print(arrivedData["photoURLS"] as! [String]);
print(arrivedData["subTourDistrict"] as! String);
print(arrivedData["tourCalendar"] as! String);
print(arrivedData["tourDistrict"] as! String);
print(arrivedData["tourName"] as! String);
self.tryingSomething.appendContentsOf(arrivedData["photoURLS"] as! [String]);
print("********\n")

}
}
}
}

而viewDidLoad是

override func viewDidLoad() {
super.viewDidLoad()
Alamofire.Request.addAcceptableImageContentTypes(acceptableContentTypes);


self.getAllDataFromURL();
self.printTheJsonDatas();

}

例如,在 getAllDataFromURL() 函数中我可以正确打印它。

这是来自 json 的 url 数据的结果:

["https://acenta.dominant.com.tr//dominant/webout/R12/php/product/img.php?path=L2QvMS9jcmkvc295a3VsL3VydW4vMDAvMjIvMTIvaW1hZ2UvL3VfMDAyMjEyLjAwMDAxLmpwZWc=&rx=650&ry=400", "https://acenta.dominant.com.tr//dominant/webout/R12/php/product/img.php?path=L2QvMS9jcmkvc295a3VsL3VydW4vMDAvMjIvMTIvaW1hZ2UvL3VfMDAyMjEyLjAwMDA2LmpwZWc=&rx=650&ry=400"]

但是 printTheJsonDatas() 打印一个空数组,如 -> [ ]

func printTheJsonDatas()
{
print(tryingSomething)
//tryingSomething : [String]
}

令人惊讶的是,当我将 printTheJsonDatas() 放入 buttonClickedAction 时,它会像我之前所说的那样工作。

我认为问题出在线程上,但我说不清楚。

最佳答案

您正在连续调用您的网络服务请求和打印功能,就像它们都是同步的一样,但它们不是。当您使用 Alamofire 发出网络服务请求时,它会异步运行。所以你不能指望它在未来的某个时间完成。你应该做的是在 Alamofire 请求的 .response block 中调用你的打印函数:

func getAllDataFromURL()
{
var i : Int = 0;
var urlDatas : [String] = allJsonDatas.getAllTours();
for(i = 0 ; i < allJsonDatas.getAllTours().count ; i += 1)
{
Alamofire.request(.GET, urlDatas[i]).responseJSON
{(response) -> Void in

if let arrivedData = response.result.value
{
self.tryingSomething.appendContentsOf(arrivedData["photoURLS"] as! [String]);
self.printTheJsonDatas();
}
}
}
}

您的代码的另一个问题是它正在进行多个网络服务调用。即使您在 .response block 中调用打印函数,它也可能不会像您想象的那样工作。它将以不同的尺寸打印多次。

关于ios - Json Values Append Array 但 ViewDidLoad 看起来是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39042947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com