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 ステートメントがトリガーされない理由です。

この変更を監視するには、通知オブザーバーをセットアップします (このスタック オーバーフローの質問から):

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

BOOLean 値はオブジェクトではないため、%@ は文字列リテラルではありません。それらは実際には unsigned char ですが、次のように 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 に答える