0
-(void)manageNetConnection{
    static BOOL closing=FALSE;
    NSLog(@"connecting Imap after net");
    if([imapStoreObj isStoreConnected] && closing==FALSE){
        [imapStoreObj close];
        NSLog(@"close store");
        closing=TRUE;
        [self performSelector:@selector(manageNetConnection) withObject:nil afterDelay:5.0];

        return;
    }else if ([imapStoreObj isStoreConnected] && closing==TRUE) {
        [self performSelector:@selector(manageNetConnection) withObject:nil afterDelay:5.0];

        return;
    }
    closing=FALSE;
    [indicatorForGetMail setHidden:NO];
    [indicatorForGetMail startAnimation:nil];
    netOff=2;
    NSLog(@"netOff==%d",netOff);

    [editFolderTable setAllowsMultipleSelection:NO];
    NSLog(@"connect net");

    [self reconnect];


}

この関数は、接続が再確立されるまで自分自身を呼び出すことが期待されています。問題は、指定された遅延の後に関数が自分自身を呼び出さないことです。助けてください

4

2 に答える 2

0

以下の行は-(void)manageNetConnection;、両方の条件が満たされている場合、5.0 以降にメソッドを 1 回呼び出します。

[self performSelector:@selector(manageNetConnection) withObject:nil afterDelay:5.0];

if 条件と else if 条件の両方をチェックします。

if([imapStoreObj isStoreConnected] && closing==FALSE){

        [self performSelector:@selector(manageNetConnection) withObject:nil afterDelay:5.0];

        return;
    }else if ([imapStoreObj isStoreConnected] && closing==TRUE) {
        [self performSelector:@selector(manageNetConnection) withObject:nil afterDelay:5.0];

        return;
    }

または、呼び出しを繰り返す which を使用できます

[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(testMethod:) userInfo:nil repeats:YES];
于 2012-09-07T11:00:58.190 に答える
0

@performSelector で同じ問題が発生しました。代わりに @performSelectorOnMainThread と NSTimer を使用してください。

-(void)manageNetConnection{
    ...
    [self performSelectorOnMainThread:@selector(startTimer:) withObject:@"manageNetConnection" waitUntilDone:YES];
    ...
}

- (void)startTimer:(NSString *)data{
    [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(endTimer:) userInfo:data repeats:NO];
}

- (void)endTimer:(NSTimer *)timer{
    NSString *target = [timer userInfo];
    SEL targetSelector = NSSelectorFromString(target);
    [self performSelectorInBackground:targetSelector withObject:nil];
}
于 2012-09-07T10:58:41.983 に答える