Застрял внутри этого цикла - PullRequest
       1

Застрял внутри этого цикла

1 голос
/ 01 сентября 2011

Почему мой loginAuth застрял внутри цикла while?

Я объявил connectionFinishLoading как

@interface LoginViewController : UIViewController {   
    BOOL connectionFinishLoading;
}
@property (nonatomic, assign) BOOL connectionFinishLoading;

@implementation LoginViewController
@synthesize connectionFinishLoading;

 -(BOOL)loginAuth {

    NSString *requestString = [NSString stringWithFormat:@"http:myURL?id=%@&format=JSON", userName.text];
    NSMutableURLRequest *requestURL = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:requestString]];
    loginConnection = [[NSURLConnection alloc] initWithRequest:requestURL delegate:self startImmediately:YES];
    [SVProgressHUD showInView:self.view status:@"Logging in"];
    while (!connectionFinishLoading) {
        NSLog(@"waiting..");
    }
     // code to executed after connection did finish loading.
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

    [responseData appendData:data];
}


- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    connectionFinishLoading = YES;
}

Ответы [ 3 ]

3 голосов
/ 01 сентября 2011

Поскольку вы блокируете цикл выполнения и пакеты не передаются по сети, таким образом, соединение никогда не завершается.

0 голосов
/ 01 сентября 2011

Как упомянул JustSid, цикл выполнения блокируется.Я бы предложил избавиться от цикла while и свойства BOOL connectionDidFinishLoading, а затем переместить исполняемый код в метод connectionDidFinishLoading.Вы все равно должны обрабатывать блокировку соединения, так или иначе.

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    // code to executed after connection did finish loading.
}
0 голосов
/ 01 сентября 2011

Попробуйте добавить это:

- (void)connection:(NSURLConnection *)conn didFailWithError:(NSError *)error
// A delegate method called by the NSURLConnection if the connection fails. 
// Production quality code would either display or log the actual error.
{
   #pragma unused(conn)
   #pragma unused(error)
   assert(conn == self.connection);

   NSLog(@"didFailWithError %@", error);

   connectionFinishLoading = YES;
}

Но создавать такие циклы очень плохо

...