gpt4 book ai didi

objective-c - AFNetworking 异步数据获取

转载 作者:行者123 更新时间:2023-11-28 22:54:48 24 4
gpt4 key购买 nike

我正在使用 AFNetworking 库从服务器提取 JSON 提要以填充 UIPickerView,但我在理解异步处理方式时遇到了一些麻烦。 @property classChoices 是一个用于填充 UIPickerViewNSArray,因此网络调用只是执行一次。但是,由于返回实例变量时 block 尚未完成,getter 返回 nil,最终导致我的程序稍后崩溃。解决此问题的任何帮助将不胜感激。如果您需要任何其他信息,请告诉我。

PickerViewController.m classChoices getter

- (NSArray *)classChoices {
if (!_classChoices) {
// self.brain here refers to code for the SignUpPickerBrain below
[self.brain classChoicesForSignUpWithBlock:^(NSArray *classChoices) {
_classChoices = classChoices;
}];
}
return _classChoices;
}

SignUpPickerBrain.m

- (NSArray *)classChoicesForSignUpWithBlock:(void (^)(NSArray *classChoices))block {
[[UloopAPIClient sharedClient] getPath:@"mobClass.php" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseJSON) {
NSLog(responseJSON);
if (block) {
block(responseJSON);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);

if (block) {
block(nil);
}
}];
}

最佳答案

您需要在 PickerViewController 中使用如下方法,该方法会在下载后返回数组。一旦返回回调,您就可以继续您的代码:

- (void)classChoices:(void (^) (NSArray * classChoices)) _callback {
if (!self.classChoices) {
// self.brain here refers to code for the SignUpPickerBrain below
[self.brain classChoicesForSignUpWithBlock:^(NSArray *classChoices) {
_callback(classChoices);
}];
}
}

// call the method

- (void) viewDidLoad {

[super viewDidLoad];

[self classChoices:^(NSArray * updatedChoices) {

self.classChoices = updatedChoices;

[self.pickerView reloadAllComponents];

}];

}

关于objective-c - AFNetworking 异步数据获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11055468/

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