簡體   English   中英

ASIHTTPRequest導致iPhone5s中的應用凍結

[英]ASIHTTPRequest causes app freeze in iPhone5s

我正在使用ASITHTTPREQUEST進行Web服務調用。 現在應用程序在iPhone5s設備(iOS7.1)中凍結。 應用程序在客戶端設備中凍結,因此我無法找出確切的問題。 請注意,該應用程序根本不會崩潰。

碼:

if ( ![self connected]){

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"No internet connection." delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
    [alert show];
    return;

}


// register
NSString *registerAPI = @"http://letsnurture.co.uk/demo/q&a/web-services/user-register.php";

NSURL *url = [NSURL URLWithString:registerAPI];
__weak ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

[request setPostValue:self.edFirstname.text forKey:@"firstname"];
[request setPostValue:self.edLastname.text forKey:@"lastname"];
[request setPostValue:self.edEmail.text forKey:@"email"];
[request setPostValue:self.edPassword1.text forKey:@"password"];
[request setPostValue:@"null" forKey:@"deviceid"];
[request setPostValue:@"true" forKey:@"check"];
[request setTimeOutSeconds:10];

[request setCompletionBlock:^{

    // Use when fetching text data
    NSString *responseString = [request responseString];

    NSLog(@"Reponse : %@",responseString);

    // Use when fetching binary data
    NSData *responseData = [request responseData];

    NSError *e;

    NSDictionary *JSON =
    [NSJSONSerialization JSONObjectWithData: responseData
                                    options: NSJSONReadingMutableContainers
                                      error: &e];

    int status = [[JSON valueForKey:@"status"] intValue];

    if (status == 1) {

       // success from server

    }else{

       // failed on server. show message from server in alert
        NSDictionary *user = [JSON valueForKey:@"User"];
        NSString *message = [user valueForKey:@"message"];

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:message delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil ];
        [alert show];


    }

}];
[request setFailedBlock:^{

     [[[UIAlertView alloc]initWithTitle:@"Error" message:@"Can not connect to the internet." delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil] show];

    NSError *error = [request error];
    NSLog(@"Error : %@",error);

}];

[request startAsynchronous];

編輯如何使用默認的URL連接(使用block)發布數據。

- (BOOL)connected
{
    Reachability *hostReachability = [Reachability reachabilityForInternetConnection];
    NetworkStatus networkStatus = [hostReachability currentReachabilityStatus];
    return !(networkStatus == NotReachable);
}

請刪除ASIFormDataRequest上的weak限定詞。 命名意味着這應該不成問題,但是在某些情況下,請求會立即被釋放並為空。 如果唯一的UI更新在完成塊中發生,則可能會掛起。

至少,該弱限定符是不必要的。

如果ASIFormDataRequest保留了該塊(不應該這樣做,因為如果他們告訴您將其用於responseData,那么它會鼓勵一個保留周期),則可以保留一個普通的指針,但是可以這樣繞過該周期:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
__weak ASIFormDataRequest *weakRequest = request;

// replace all references to 'request' inside the block with 'weakRequest'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM