0

我的代码中有以下代码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];
    }
}
4

3 回答 3

5

根据文档RKReachabilityObserver

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

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

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

[[NSNotificationCenter defaultCenter] addObserver:self 
                                      selector:@selector(reachabilityStatusChanged:) 
                                      name:RKReachabilityDidChangeNotification object:nil];
于 2012-04-30T02:33:04.020 回答
2

布尔值不是对象,因此 %@ 不是它们的字符串文字。它们实际上是无符号字符,但您使用 NSLog 记录它们:

NSLog([[[RKClient sharedClient] reachabilityObserver] isReachabilityDetermined] ? @"Yes" : @"No");
于 2012-04-30T02:14:00.587 回答
1

这是 RestKit 0.20 及更高版本中的一些更改。可达性块的代码应如下所示:

    RKObjectManager *manager = [RKObjectManager managerWithBaseURL:[RemoteTools serverUrl]];
[manager.HTTPClient setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    if (status == AFNetworkReachabilityStatusNotReachable) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No network connection"
                                                        message:@"You must be connected to the internet to use this app."
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
    }
}]
于 2014-11-11T10:19:30.530 回答