簡體   English   中英

NSMutableURLRequest setHTTPBody方法使用SIGABRT警告使應用程序崩潰

[英]NSMutableURLRequest setHTTPBody method crashes App with SIGABRT Warning

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"riderfinder.appspot.com/login"]];
    [request setHTTPMethod:@"POST"];
    [request setValue:@"text/plain" 
   forHTTPHeaderField:@"Content-type"];

    NSString *body = @"username=";
    [body stringByAppendingString:accountEntered];
    [body stringByAppendingString:@"&"];
    [body stringByAppendingString:@"password="];
    [body stringByAppendingString:passwordEntered];

    NSMutableData *data = [[NSMutableData data] initWithString:body];

    //Crashes everything with "SIGABRT" warning/error. Nothing else is said.
    [request setHTTPBody:data];

如果有人知道出了什么問題,我將不勝感激。 我將其范圍縮小到通過蘋果的調試器導致崩潰的最后一行。 非常感謝你!

有兩個錯誤:

  1. 不追加, [body stringByAppendingString:accountEntered]應為body=[body stringByAppendingString:accountEntered]

  2. NSMutableData *data = [[NSMutableData data] initWithString:body]; 使用不正確,可以使用NSData *data=[body dataUsingEncoding:NSUTF8StringEncoding];

所以我修改了代碼:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"riderfinder.appspot.com/login"]];
[request setHTTPMethod:@"POST"];
[request setValue:@"text/plain" forHTTPHeaderField:@"Content-type"];

NSString *body = @"username=";
body=[body stringByAppendingString:accountEntered];
body=[body stringByAppendingString:@"&"];
body=[body stringByAppendingString:@"password="];
body=[body stringByAppendingString: passwordEntered];

//NSMutableData *data = [[NSMutableData data] initWithString:body];
NSData *data=[body dataUsingEncoding:NSUTF8StringEncoding];

[request setHTTPBody:data];

首先,您應該使“ accountEntered”和“ passwordEntered”不為零。 如果執行了此操作,則應設置斷點以確切地知道哪條線崩潰。通常,“ SIGABRT”錯誤表示您釋放了更多或無法識別的選擇器。 答案1上的代碼正確。

暫無
暫無

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

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