gpt4 book ai didi

iphone - 使用 NSURLConnection sendSynchronousRequest 进行错误处理

转载 作者:行者123 更新时间:2023-12-03 18:19:56 26 4
gpt4 key购买 nike

如何使用 NSURLConnection sendSynchronousRequest 进行更好的错误处理?有什么办法可以实现

- (void)connection:(NSURLConnection *)aConn didFailWithError:(NSError *)error

我有一个 nsoperation 队列,它在后台获取数据,这就是我有同步请求的原因。如果我必须实现异步请求,那么我如何等待请求完成。因为如果没有数据,该方法就无法继续。

最佳答案

我不会依赖非零的错误来指示发生了错误。

我一直在使用本回答中描述的错误检查,但我相信它在某些情况下会产生误报/虚假错误。

据此SO answer ,我正在更改为使用该方法的结果来确定成功/失败。然后(并且只有那时)检查错误指针以获取失败的详细信息。

NSError *requestError;
NSURLResponse *urlResponse = nil;
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&requestError];
/* Return Value
The downloaded data for the URL request. Returns nil if a connection could not be created or if the download fails.
*/
if (response == nil) {
// Check for problems
if (requestError != nil) {
...
}
}
else {
// Data was received.. continue processing
}

此方法将避免对下载过程中发生的错误使用react,而该错误并未导致下载失败。我认为下载发生时可能会遇到在框架内处理的非关键错误,并且它们具有使用错误对象设置错误指针的副作用。

例如,我收到了下载应用程序的用户报告的 POSIX 错误,这些错误似乎是在 URL 连接处理的深处发生的。

此代码用于报告错误:

NSString *errorIdentifier = [NSString stringWithFormat:@"(%@)[%d]",requestError.domain,requestError.code];
[FlurryAPI logError:errorIdentifier message:[requestError localizedDescription] exception:nil];

错误报告如下:

Platform: iPhone
Error ID: (NSPOSIXErrorDomain)[22]
Msg: Operation could not be completed. Invalid argument

映射回来..

requestError.domain = NSPOSIXErrorDomain
requestError.code = 22
[requestError localizedDescription] = Operation could not be completed. Invalid argument

我所能找到的只是错误代码 22 是 EINVAL,但这还没有产生任何进一步的详细信息。

我得到的其他错误来自 NSURL 域,我完全预计在不同的网络条件下会出现这种情况:

NSURLErrorTimedOut
NSURLErrorCannotConnectToHost
NSURLErrorNetworkConnectionLost
NSURLErrorNotConnectedToInternet
+others

关于iphone - 使用 NSURLConnection sendSynchronousRequest 进行错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2069039/

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