我正在使用 Apple 的 Reachability
类来确定数据或 wifi 是否可用。但是,一位用户(使用美国 iPhone)正在另一个国家/地区测试该应用程序,他在尝试访问 MapKit 时看到以下错误。
控制台
在我对此错误的研究中,我发现PBRequester
是ProtocolBuffer。
2012-10-15 21:16:00.921 WrightsCS App[24239:907] PBRequester failed with Error Error Domain=kCFErrorDomainCFNetwork Code=-1018 "International roaming is currently off." UserInfo=0x1e5587d0 {NSErrorFailingURLKey=https://gsp13-cn.ls.apple.com/shift, NSErrorFailingURLStringKey=https://gsp13-cn.ls.apple.com/shift, NSLocalizedDescription=International roaming is currently off.}
示例
-(BOOL)hasDataConnection
{
Reachability *networkReachability = [Reachability reachabilityForInternetConnection];
NetworkStatus networkStatus = [networkReachability currentReachabilityStatus];
if ( networkStatus == NotReachable )
{
return NO;
}
else
{
if ( ! [Reachability reachabilityWithHostName:@"www.google.com"] )
return NO;
return YES;
}
}
问题
我们如何检测用户是否正在漫游,或者至少确保用户在偶然漫游时不会遇到此错误?
最佳答案
好的 - 这不是答案,但可能会为您指明正确的方向。首先,我找不到似乎可以让您执行此操作的 Objective C 类(例如 NSURLRequest
类)。
我认为您需要直接进入 CFNetwork Framework (CFNetwork Framework Reference)因为查看 CFNetworkError 代码有这些诱人的条目(与您的错误消息匹配):
kCFURLErrorNotConnectedToInternet = -1009,
kCFURLErrorInternationalRoamingOff = -1018,
kCFURLErrorDataNotAllowed = -1020,
不幸的是,我不了解 CFNetwork 框架,尽管查看了 Apple 文档,但我并不知道哪个 CFNetwork 框架 API 使用这些值。但我相信总会有办法的。
我的两个“想法”(我宽松地使用这个词):
- 使用
CFHost
(并获取回调来查询错误代码) - 使用
CFNetDiagnosticCopyNetworkStatusPassively
(并解析返回的字符串)。
如果有专家的话,我很想看到真正的答案。
关于ios - 可达性和国际漫游,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12925812/