0

OS X 用の最新の Parse SDK をダウンロードし、アプリの再起動後もログインを保持しようとしています (明らかに)。以前に Parse を使用したことがありますが、iOS でも OS X でも、この問題に直面したことはありません。

私のアプリの開始時:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Insert code here to initialize your application
    [Parse setApplicationId:@"XXX" clientKey:@"XXX"];
}

私の最初のView Controllerで:

-(void)viewDidAppear{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        if(![PFUser currentUser]){
            [self performSegueWithIdentifier:@"login" sender:nil];
        }else{
            ...
        }
    });
}

私のログインは成功し、その時点[PFUser currentUser]で有効です。次に、アプリを閉じます (強制終了と適切な終了の両方を試みました)。もう一度開くと、[PFUser currentUser]ゼロです。私はこれを何度も試しましたが、同じ結果が得られます。なんで?

4

1 に答える 1

1

長い間苦労した後、私は解決策を見つけました。ユーザーチェックブロックをdispatch_asyncする必要があり、動作を開始します。したがって、代わりに:

dispatch_once(&onceToken, ^{
    if(![PFUser currentUser]){
        [self performSegueWithIdentifier:@"login" sender:nil];
    }else{
        ...
    }
});

やった:

dispatch_once(&onceToken, ^{
    dispatch_async(dispatch_get_main_queue(), ^{
        if(![PFUser currentUser]){
            [self performSegueWithIdentifier:@"login" sender:nil];
        }else{
            ...
        }
    });   
});

そして、それは働き始めました。何かがまだviewDidAppearメイン キューで同期的に初期化されていないことを確認するのは興味深いことです (はい、それはメイン キューであり、再確認しました) が、同じキューに非同期的にポストされた後、どこかで初期化されます。Parse は、SDK の品質管理を強化する必要があります。

于 2015-11-03T00:13:13.047 に答える