Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确定iPhone上的互联网可用性?_Iphone_Objective C - Fatal编程技术网

确定iPhone上的互联网可用性?

确定iPhone上的互联网可用性?,iphone,objective-c,Iphone,Objective C,我正在iPhone应用程序中使用NSURLConnection,因此: NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest: request delegate: self]; 请求已设置并正常工作,但如果没有可用的连接,我希望能够向用户提供“connection not available”(连接不可用)消息。有没有一种快速方法可以确定iPhone上是否有互联网连接 在初始化NSURLConnection后,是否可以

我正在iPhone应用程序中使用NSURLConnection,因此:

NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest: request delegate: self];
请求已设置并正常工作,但如果没有可用的连接,我希望能够向用户提供“connection not available”(连接不可用)消息。有没有一种快速方法可以确定iPhone上是否有互联网连接

在初始化NSURLConnection后,是否可以添加以下内容:

if (conn) { // do normal processing } else { // display connection not available message }
提前感谢,,
Ben

这是我的作品,取自苹果地震xml项目:

- (BOOL)isDataSourceAvailable
{
    static BOOL checkNetwork = YES;
    if (checkNetwork) { // Since checking the reachability of a host can be expensive, cache the result and perform the reachability check once.
        checkNetwork = NO;

        Boolean success;    
        const char *host_name = "twitter.com"; // your data source host name

        SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host_name);
        SCNetworkReachabilityFlags flags;
        success = SCNetworkReachabilityGetFlags(reachability, &flags);
        _isDataSourceAvailable = success && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired);
        CFRelease(reachability);
    }
    return _isDataSourceAvailable;
}

这对我很有用,取自apple seismic xml项目:

- (BOOL)isDataSourceAvailable
{
    static BOOL checkNetwork = YES;
    if (checkNetwork) { // Since checking the reachability of a host can be expensive, cache the result and perform the reachability check once.
        checkNetwork = NO;

        Boolean success;    
        const char *host_name = "twitter.com"; // your data source host name

        SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, host_name);
        SCNetworkReachabilityFlags flags;
        success = SCNetworkReachabilityGetFlags(reachability, &flags);
        _isDataSourceAvailable = success && (flags & kSCNetworkFlagsReachable) && !(flags & kSCNetworkFlagsConnectionRequired);
        CFRelease(reachability);
    }
    return _isDataSourceAvailable;
}

Raj,这段代码是有效的,但并不总能产生预期的结果

iPhone上TCP栈的工作方式与预期的大不相同。使用“可达性”代码,有时会出现网络连接,但无法可靠地检测到。然而,启动MobileSafari,然后重新尝试使用“可达性”代码(Raj的代码)检查连接,将得到正确的结果


我发现确定网络连接最有效的方法是在应用程序加载时在单独的线程中运行NSURLConnection检查。对URL进行调用,您知道该URL将返回类似“是”的内容(即服务器上的HTML文件或其他内容)。然后检查以确保返回的结果等于静态文本。这样,您就知道NSURLConnection堆栈可以正确地进行扩展,而“可访问性”代码的工作并不一致。

Raj,该代码可以工作,但并不总是创建所需的结果

iPhone上TCP栈的工作方式与预期的大不相同。使用“可达性”代码,有时会出现网络连接,但无法可靠地检测到。然而,启动MobileSafari,然后重新尝试使用“可达性”代码(Raj的代码)检查连接,将得到正确的结果


我发现确定网络连接最有效的方法是在应用程序加载时在单独的线程中运行NSURLConnection检查。对URL进行调用,您知道该URL将返回类似“是”的内容(即服务器上的HTML文件或其他内容)。然后检查以确保返回的结果等于静态文本。这样,您就知道NSURLConnection堆栈正在正确地伸出,而不是“可访问性”代码,该代码并不一致地工作。

@jasonb-此方法的唯一问题是执行此检查所需的时间-您不希望您的用户只需等待几秒钟即可检测internet。我以前也是这样做的,但我改变了我的代码,因为我听说苹果拒绝应用程序,如果它们需要很长时间才能检测到internet@Raj-如果在应用程序启动后不需要访问Internet,您可以将进程发送到另一个NSThread。@jasonb-此方法唯一的问题是执行此检查所需的时间-您不需要希望您的用户只需等待几秒钟即可检测internet。我以前也是这样做的,但我改变了我的代码,因为我听说苹果拒绝应用程序,如果它们需要很长时间才能检测到internet@Raj-如果在应用程序启动后不需要访问Internet,则可以将进程发送到另一个NSThread。