【发布时间】:2012-06-13 17:27:56
【问题描述】:
我将可达性代码合并到我的应用程序中,它已经成功运行了几个月,但到目前为止我只在 iOS 5 设备上使用过它。 但是它不适用于 iOS 4 设备。
通知注册如下:
- (id) init
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(reachabilityChange:)
name:kReachabilityChangedNotification
object:nil];
...
- (void) appBecameActive
{
...
self.reachability = [Reachability reachabilityWithHostName:[url host]];
...
[self.reachability startNotifier];
stopNotifier 只在 dealloc 中被调用
问题是当可达性发生变化时,ReachabilityCallback 没有被回调,但我看不出它在 iOS5 上应该没问题但在 iOS4 上没问题的任何理由。
这部分代码与Apple示例源代码没有变化:
static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void *info) {
#pragma unused (target, flags)
NSCAssert(info != NULL, @"info was NULL in ReachabilityCallback");
NSCAssert([(__bridge id)info isKindOfClass:[Reachability class]], @"info was wrong class in ReachabilityCallback");
Reachability *noteObject = (__bridge Reachability *)info;
// Post a notification to notify the client that the network reachability changed.
[[NSNotificationCenter defaultCenter] postNotificationName:kReachabilityChangedNotification object:noteObject];
}
如前所述,在 iOS5 设备上运行很长时间以来一切正常,过去有没有其他人遇到过类似的问题,将可达性代码整合到 iOS4 中?
【问题讨论】:
-
每次我使用 Reachability 时,我都会链接 SystemConfiguration 框架,你这样做了吗?
-
谢谢,但是,正如我提到的,它适用于 iO5,如果没有框架,它就无法做到。
标签: ios