gpt4 book ai didi

ios - 在不同类的方法中获取 NSURLConnection 响应(来自辅助类)

转载 作者:可可西里 更新时间:2023-11-01 05:54:11 24 4
gpt4 key购买 nike

我有一个类“WebAPI”,它处理所有 Web API 调用,该类通过其基于异步委托(delegate)的调用使用 NSURLConnection。

每当对象需要与 Web API 通信时,它将使用 WebAPI 的实例并调用所需的方法,如下所示,在登录的情况下,我从 AppDelegate 进行以下调用:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
WebAPI *webAPI = [[WebAPI alloc] init];
[webAPI performLoginWithUserName:@"test1@myserver.com" andPassword:@"password"];
}

问题在于,一旦执行了 performLoginWithUserName:andPassword 调用,代码就会继续运行,并且在 WebAPI.m 中实现的委托(delegate)方法中会收到任何/所有响应。

这是一个真正的问题,因为我需要能够获取响应代码以及类方法中从调用 WebAPI 的地方接收到的任何数据。我希望能够做到这一点:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
WebAPI *webAPI = [[WebAPI alloc] init];
WebAPIResponse * webAPIRespnse = [webAPI performLoginWithUserName:@"test1@myserver.com" andPassword:@"password"];
}

其中 WebAPIResponse 类是一个自定义类,它将包含 HTTP 状态代码和接收到的任何数据。

如果我将 WebAPI.m 更改为使用 NSURLConnection sendSynchronousRequest,这是可以实现的,但这并不能使我接收所有 HTTP 代码。

满足此要求的最佳方法是什么?

感谢您的帮助。

最佳答案

您可以使用 block 来处理响应。例如:

WebApi.h
- (void)performLoginWithUsername:(NSString *)userName
andPassword:(NSString *)password
successBlock:(void(^)(NSData *response))successBlock
failureBlock:(void(^)(NSError *error))failureBlock;

WebApi.m
@interface WebAPI()
@property (nonatomic, copy) void(^authorizationSuccessBlock)(NSData *response);
@property (nonatomic, copy) void(^authorizationFailureBlock)(NSError *error);
@end

@implementation WebAPI
- (void)performLoginWithUsername:(NSString *)userName
andPassword:(NSString *)password
successBlock:(void(^)(NSData *response))successBlock
failureBlock:(void(^)(NSError *error))failureBlock {
self.authorizationSuccessBlock = successBlock;
self.authorizationFailureBlock = failureBlock;
// NSURLConnection call for authorization here
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
if (self.authorizationSuccessBlock != nil) {
self.authorizationSuccessBlock(data);
self.authorizationSuccessBlock = nil;
}
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
if (self.authorizationFailureBlock != nil) {
self.authorizationFailureBlock(error);
self.authorizationFailureBlock = nil;
}
}

AppDelegate.m
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
WebAPI *webAPI = [[WebAPI alloc] init];
[webAPI performLoginWithUserName:@"test1@myserver.com" andPassword:@"password" successBlock:^(NSData *response) {
// Handle result here
} failureBlock:^(NSError *error) {
// Handle error here
}];

关于ios - 在不同类的方法中获取 NSURLConnection 响应(来自辅助类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23056775/

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