gpt4 book ai didi

objective-c - 通过 UIAlerView+AFNetworking 在 UIAlertView 中显示错误消息

转载 作者:行者123 更新时间:2023-12-04 04:33:16 25 4
gpt4 key购买 nike

AFNetworking 2.0 附带了一个类别 UIAlertView+AFNetworking.h。我用它在我的应用程序中显示错误消息,如下所示:

[UIAlertView showAlertViewForTaskWithErrorOnCompletion:task delegate:nil]

但是我想在 UIAlertView 的消息中添加一些其他消息。

即:

StatusCode: 422

JSON Data: {"errors":{"detail":"Wrong password"}}



如何通过 UIAlertView+AFNetworking 中的函数获取“密码错误”并显示在 UIAlertView 中?

最佳答案

UIAlertView+AFNetworking类别使用来自 NSError 的错误消息 – localizedDescription , localizedRecoverySuggestionlocalizedFailureReason . AFNetworking 在失败时生成 NSError,但是,您必须编写自己的 responseSerializer 以在那里设置自定义错误消息。

这个话题已经被彻底讨论过 on GitHub我使用基于@camdez 的代码片段的解决方案。

我来自 API 的错误响应消息如下所示:

{ error: { message: "This username already exists" } }

现在,我已经将 AFJSONResponseSerializer 子类化,当发生错误时,我将错误消息保存到 NSError 实例。

CustomResponseSerializer.h
@interface CustomResponseSerializer : AFJSONResponseSerializer

@end

CustomResponseSerializer.m
@implementation CustomResponseSerializer

- (id)responseObjectForResponse:(NSURLResponse *)response
data:(NSData *)data
error:(NSError *__autoreleasing *)error
{
id JSONObject = [super responseObjectForResponse:response data:data error:error]; // may mutate `error`

if (*error && [JSONObject objectForKey:@"error"]) {
NSMutableDictionary *mutableUserInfo = [(*error).userInfo mutableCopy];

mutableUserInfo[NSLocalizedFailureReasonErrorKey] = [[JSONObject objectForKey:@"error"] objectForKey:@"message"];

NSError *newError = [NSError errorWithDomain:(*error).domain code:(*error).code userInfo:[mutableUserInfo copy]];
(*error) = newError;
}

return JSONObject;
}

@end

最后,您需要在 AFHTTPSessionManager 上设置适当的 responseSerializer (或 AFHTTPRequestOperationManager 如果您使用 NSURLConnection API)实例。如果你像我一样继承这个类,你可以简单地在你的 init 方法中执行以下操作:
self.responseSerializer = [CustomResponseSerializer serializer];

关于objective-c - 通过 UIAlerView+AFNetworking 在 UIAlertView 中显示错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20210186/

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