我有一个IOS应用程序,它使用网络连接,有时它会丢失这个网络连接,无论何时,我希望应用程序移回特定的UIViewController ..实现这个目的的最佳方法是什么?
我可以从appDelegate执行此操作吗?
答案 0 :(得分:1)
您使用的是Reachability class described in the Apple documentation吗?如果没有,你应该看看它。它将为您提供网络状态,包括您是否已连接到互联网。它有一个网络状态变化的通知,因此您可以将观察者放在您的应用程序委托中或您需要它的任何其他位置以实现您的目标。
网上已经提供了很多帮助,其中包含如何使用可达性的示例,this one可能是您可以开始使用的。
Raachability更改通知可用于在连接丢失或恢复时通知您的应用。请参阅以下代码中的Reachability类的通知声明;
static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* info)
{
#pragma unused (target, flags)
NSCAssert(info != NULL, @"info was NULL in ReachabilityCallback");
NSCAssert([(NSObject*) info isKindOfClass: [Reachability class]], @"info was wrong class in ReachabilityCallback");
//We're on the main RunLoop, so an NSAutoreleasePool is not necessary, but is added defensively
// in case someon uses the Reachablity object in a different thread.
NSAutoreleasePool* myPool = [[NSAutoreleasePool alloc] init];
Reachability* noteObject = (Reachability*) info;
// Post a notification to notify the client that the network reachability changed.
[[NSNotificationCenter defaultCenter] postNotificationName: kReachabilityChangedNotification object: noteObject];
[myPool release];
}
要使其工作,您必须调用startNotifier:
- (BOOL) startNotifier
{
BOOL retVal = NO;
SCNetworkReachabilityContext context = {0, self, NULL, NULL, NULL};
if(SCNetworkReachabilitySetCallback(reachabilityRef, ReachabilityCallback, &context))
{
if(SCNetworkReachabilityScheduleWithRunLoop(reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode))
{
retVal = YES;
}
}
return retVal;
}