互联网检查不适用于所有设备ios应用程序
问题描述:
我是一名新的iPhone开发人员。我已经创建了一个iOS应用程序,用于检查互联网可用性。互联网检查不适用于所有设备ios应用程序
我用下面的方法:
-(BOOL)connectedToInternet
{
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]
encoding:NSStringEncoding
error:nil];
return (URLString != NULL) ? YES : NO;
}
在applicationDidFinishLaunching
我呼吁的方法,并显示警告,如果没有连接,否则进入第二个屏幕。
我已经在我的iPhone(iOS 4.3.1)和iPad(iOS 4.3.3)中下载了该应用程序。它成功地运作。
但我的客户说他下载了他的iPhone(iOS 4.3.5),并且它总是显示“没有Internet连接”警告。
我已经搜索了几个网站,以找到问题和永久的解决方案。但我没有发现我的错在哪里,为什么应用程序不能使用所有设备。
答
苹果推荐的方法,如果一个设备在线是使用Reachability
类 - 在这里看到的示例代码:http://developer.apple.com/library/ios/#samplecode/Reachability/Introduction/Intro.html
答
首先,这是一个糟糕的方式检查连接。请看Apple的Reachability示例代码。
其次,你这样做:
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"] encoding:NSStringEncoding error:nil];
停止传递nil
作为错误参数。
NSError *error;
NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"] encoding:NSStringEncoding error:&error];
如果URLString
回来nil
,把error
在您的警报。
答
亲自使用以下技术来测试Internet可用性(无论是WiFi还是3G)。我添加对一类特殊的(在我的情况下,我把它叫做WiFiCheckClass
),并在.h文件中我做的:
#import <Foundation/Foundation.h>
#import "SystemConfiguration/SCNetworkReachability.h"
@interface UIDevice (DeviceConnectivity)
+(BOOL) cellularConnected;
+(BOOL) wiFiConnected;
+(BOOL) networkConnected;
@end
而在.m文件我做的:
#import "WiFiCheckClass.h"
@implementation UIDevice (DeviceConnectivity)
+(BOOL) cellularConnected
{
SCNetworkReachabilityFlags flags = 0;
SCNetworkReachabilityRef netReachability;
netReachability = SCNetworkReachabilityCreateWithName(CFAllocatorGetDefault(), [@"www.google.com" UTF8String]);
if(netReachability)
{
SCNetworkReachabilityGetFlags(netReachability, &flags);
CFRelease(netReachability);
}
if(flags & kSCNetworkReachabilityFlagsIsWWAN) return YES;
return NO;
}
+(BOOL) networkConnected
{
SCNetworkReachabilityFlags flags = 0;
SCNetworkReachabilityRef netReachability;
BOOL retrievedFlags = NO;
netReachability = SCNetworkReachabilityCreateWithName(CFAllocatorGetDefault(), [@"www.google.com" UTF8String]);
if(netReachability)
{
retrievedFlags = SCNetworkReachabilityGetFlags(netReachability, &flags);
CFRelease(netReachability);
}
if (!retrievedFlags || !flags) return NO;
return YES;
}
+(BOOL) wiFiConnected
{
if ([self cellularConnected]) return NO;
return [self networkConnected];
}
@end
现在任何时候我需要知道是否有Internet连接我导入库并执行以下测试:
if([UIDevice cellularConnected] || [UIDevice networkConnected] || [UIDevice wiFiConnected])
{
//there is Internet, do what you want
}
iOS 4.5;是一个错字? – deanWombourne