我正在尝试将networking连接检测function集成到我的应用程序中,但是似乎在某些地方我犯了一个错误,因为我的networking更改没有被检测/打印到控制台中。 正如在文章中提到的,我目前正在使用以下这些类和工具来完成这项工作: 可达性{.h, .m} NSNotificationCenter networking链接调节器 码 在AppDelegate.Swift中 ,我设置了NSNotificationCenter来检测更改: func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // … // A: Checks if the device is connected to the internet var defaultCenter: Void = NSNotificationCenter().addObserver(self, selector:"checkForReachability", name: kReachabilityChangedNotification, object: nil) } 在同一个AppDelegate类中,我也创build了这个函数,在有变化时触发: func checkForReachability () { var networkReachability = Reachability.reachabilityForInternetConnection() networkReachability.startNotifier() var remoteHostStatus […]
我正在iOS中创build一个新的旅行应用程序,这个应用程序高度依赖于地图,将包括两个地图。 当用户拥有强大的networking信号(Apple Maps)时,我的第一个地图将会工作。 我的第二个地图将被用于当他们不是任何networking或真正低信号(离线地图盒)。 为什么我在一个应用程序中有两个不同的地图? 我的应用程序是一个方向应用程序,所以当用户真的很低的networking或没有它会去离线地图地图MapBox 。 此外,苹果地图将Yelp整合,而不是离线地图地图MapBox 。 所以我的问题:如何检测WiFi,4G Lte和3G中的networking信号。
有没有人find了在iOS上实现Reachability的中途体面指南?
我已经find了几个代码示例来做我想做的事(检查可达性),但是没有一个看起来对我有用。 我不明白为什么这不想玩好。 在我的项目中,我有可达性 #import <SystemConfiguration/SystemConfiguration.h> 我已经添加了框架。 我也有: #import "Reachability.h" 在我试图使用可达性的.m的顶部。 Reachability* reachability = [Reachability sharedReachability]; [reachability setHostName:@"http://www.google.com"]; // set your host name here NetworkStatus remoteHostStatus = [reachability remoteHostStatus]; if(remoteHostStatus == NotReachable) {NSLog(@"no");} else if (remoteHostStatus == ReachableViaWiFiNetwork) {NSLog(@"wifi"); } else if (remoteHostStatus == ReachableViaCarrierDataNetwork) {NSLog(@"cell"); } 这给了我各种各样的问题。 我究竟做错了什么? 我是一个很好的编码员,当我想知道我想要做什么或不知道要做什么时,我需要把自己想做的事情放在哪里,我只是很难。 (太令人沮丧了) 更新:这是怎么回事。 这是在我的viewcontroller,我有 #import <SystemConfiguration/SystemConfiguration.h> 和 […]
我不知道这是否可能,但我有这种情况。 我有一个网站显示在我的UIWebView中有一个UISegmentedController设置的链接。 他们的网站可以检测你是否在无线networking或3Gnetworking上。 现在分段控制器指向2个不同的页面。 1 – 一个iPhone友好的login屏幕2 – 主页,一旦你login。 现在这是一个问题: 我可以编程我的应用程序,以检测是否在WiFi或3G(我知道你可以做到这一点),但基于答案去1或2段 像这样: if(iPhone device is on 3g) { Go to Segment 1; } else { Go to Segment 0; }
我知道这个问题似乎是其他许多人的问题,但是,我不觉得这里简单的例子很好解释。 从Android和黑莓的背景来看,如果没有可用的连接,通过HTTPUrlConnection发出请求HTTPUrlConnection立即失败。 这似乎是完全理智的行为,我很惊讶地发现iOS中的NSURLConnection没有效仿它。 据我所知,苹果(和其他扩展了它的人)提供了一个Reachability类来协助确定networking状态。 我很高兴首先看到这一点,并完全期待看到像bool isNetworkAvailable() ,但相反,令我惊讶,我发现一个复杂的系统需要通知注册和callback,以及一堆看似不必要的细节。 一定有更好的办法。 我的应用程序已经正常处理连接失败,包括没有连接。 用户被通知失败,应用程序继续前进。 因此,我的要求很简单:我可以在所有HTTP请求之前调用单个同步函数,以确定是否应该实际发送请求。 理想情况下,它不需要设置,只是返回一个布尔值。 这真的不可能在iOS?
我试图将这个代码片段转换为Swift。 由于一些困难,我正在艰难地起步。 – (BOOL) connectedToNetwork { // Create zero addy struct sockaddr_in zeroAddress; bzero(&zeroAddress, sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; // Recover reachability flags SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress); SCNetworkReachabilityFlags flags; BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags); CFRelease(defaultRouteReachability); if (!didRetrieveFlags) { return NO; } BOOL isReachable = flags & kSCNetworkFlagsReachable; BOOL needsConnection = […]
我想检查一下,如果我在iOS上使用Cocoa Touch库或使用Cocoa库的OSX上有Internet连接。 我想出了一个使用NSURL 。 我这样做的方式似乎有点不可靠(因为即使Google有一天可能会倒闭,依靠第三方似乎不好),而我可以检查一下其他网站的反应,如果谷歌没有回应,看起来很浪费,对我的应用程序来说是不必要的开销。 – (BOOL) connectedToInternet { NSString *URLString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.google.com"]]; return ( URLString != NULL ) ? YES : NO; } 我做得不好吗? (更不用说stringWithContentsOfURL在iOS 3.0和OSX 10.4中被弃用),如果是这样,有什么更好的方法来完成这一点?
当我尝试检查我的iPhone上的互联网连接时,我收到了一堆错误。 任何人都可以帮我解决这个问题吗? 代码: import Foundation import SystemConfiguration public class Reachability { class func isConnectedToNetwork() -> Bool { var zeroAddress = sockaddr_in() zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress)) zeroAddress.sin_family = sa_family_t(AF_INET) let defaultRouteReachability = withUnsafePointer(&zeroAddress) { SCNetworkReachabilityCreateWithAddress(nil, UnsafePointer($0)) } var flags: SCNetworkReachabilityFlags = 0 if SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) == 0 { return false } let isReachable = (flags & UInt32(kSCNetworkFlagsReachable)) […]