我的AppDelegate.m中包含以下代码-NSLog的结果始终为(null),因此永远不会触发无法访问的条件。我想知道为什么会这样/我做错了什么。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [IKRestKitManager configureRestKit];

    self.window.rootViewController = self.tabBarController;

    [self.window makeKeyAndVisible];

    [self prepareForLogin];

    return YES;
}

#pragma mark - onstart

- (void)prepareForLogin {

    if ([[[RKClient sharedClient] reachabilityObserver] isReachabilityDetermined] && ![[RKClient sharedClient] isNetworkReachable]) {
        UIAlertView *reachAV = [[UIAlertView alloc] initWithTitle:@"Cannot connect to Internet" message:@"iK9 cannot reach the Internet. Please be sure that your device is connected to the Internet and try again." delegate:self cancelButtonTitle:@"Retry" otherButtonTitles:nil];
        reachAV.tag = 0;
        [reachAV show];
    }

    NSLog(@"%@",[[[RKClient sharedClient] reachabilityObserver] isReachabilityDetermined]);


    if (![IKUserController loggedInUser]) {
        IKLoginViewController *loginVC = [[IKLoginViewController alloc] init];
        loginVC.scenario = SCENARIO_NEW;
        [self.window.rootViewController presentModalViewController:loginVC animated:YES];
    }
}

最佳答案

根据RKReachabilityObserver的文档:


  初始化后,RKReachabilityObserver实例处于不确定状态,以指示尚未建立可达性状态。观察者处理完第一个回调后,观察者将对YES进行可达性确定的回答,并且networkStatus将返回确定的响应。


您需要等到确定可达性状态后,才能检查连接是否可用。这就是为什么您的第一个if语句未触发的原因。

要监视此更改,请设置通知观察者(来自this Stack Overflow question):

[[NSNotificationCenter defaultCenter] addObserver:self
                                      selector:@selector(reachabilityStatusChanged:)
                                      name:RKReachabilityDidChangeNotification object:nil];

关于iphone - RestKit可达性null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10377622/

10-12 00:32