gpt4 book ai didi

ios - 等待 AFNetworking GET 请求

转载 作者:行者123 更新时间:2023-12-01 18:58:45 27 4
gpt4 key购买 nike

我正在使用 AFNetworking 获取路线上所有当前巴士的 JSON。我想要做的是当用户打开 View 时,它会将所有总线显示为引脚(现在)。我解析出所有 JSON 并拥有我所有的车辆对象。

问题是,当我运行获取 JSON 的方法时,它是异步的,这意味着当运行方法调用之后的代码行时,我还没有数据。

viewDidLoad我有:

- (void)viewDidLoad
{
[super viewDidLoad];

[self findCampus];
_myMap.mapType = MKMapTypeHybrid;
model = [[ShuttleModel alloc]init];
[model getMapVehiclePoints];

[self placeCurrentVehicles];
// Do any additional setup after loading the view.
}

在哪里 getMapVehiclePointsmodel.m是:
-(void)getMapVehiclePoints
{
_vehicles = [service GetMapVehiclePoints];
}

ShuttleService.m我有这两种方法:
- (void)getMapVehiclePointsWithCallback:(CallbackBlock)callback {


NSString *methodURL = [NSString stringWithFormat:@"%@GetMapVehiclePoints", BASE_URL];

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:methodURL parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

if (callback) callback([self parseVehicles:(id)responseObject]);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
if (callback) callback(@[]);
}];

}

-(NSArray *)GetMapVehiclePoints;
{

__block NSArray *vehicles = [[NSArray alloc]init];
[self getMapVehiclePointsWithCallback:^(NSArray *vehiclePoints) {
vehicles = vehiclePoints;
}];
return vehicles;
}

当我将模型中的返回数组呈现给 View 时,它有零个对象,因为 GET 尚未完成,我该如何预先加载这些或等待它们加载,然后再转到 [self placeCurrentVehicles] ?

最佳答案

将所有使用新点的代码放入一个单独的方法中,并在数据到达时从成功回调中调用该方法。您还可以在发出请求时显示事件指示器并将其隐藏在此方法中。

您可以预先请求数据,但通常如果用户没有请求,您希望尽可能少地做工作。

公交路线不太可能发生太大或经常变化,因此每次收到响应时,您都可以将其存储在 Core Data 中。现在,当您需要数据时,您可以从数据存储中获取数据,然后请求更新数据。通过这种方式,您可以立即向用户显示他们已经查看过的路线,然后在短时间内更新任何更改。该模型还将支持以前查看过的路线的离线显示。

关于ios - 等待 AFNetworking GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24416679/

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