Проблема с NSHTTPCookie - PullRequest
       31

Проблема с NSHTTPCookie

2 голосов
/ 11 мая 2011

Я хочу сделать заявку на вход.Мой первый экран формы входа в систему с двумя текстовыми полями и одной кнопкой.Когда я нажимаю эту кнопку, я вызываю один метод, который вызывает этот метод:

- (int)login {
// Add data to post request

NSHTTPURLResponse * response;
NSString *myRequestString = [[NSString alloc] initWithFormat:@"userdata='%@'&passdata='%@'",
                             username.text, password.text];
NSError * error;
NSData *myRequestData = [NSData dataWithBytes: [myRequestString UTF8String] length: [myRequestString length]];
NSMutableURLRequest *request;
request = [[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://server.com/login.php"]
                                        cachePolicy:NSURLRequestReloadIgnoringCacheData 
                                    timeoutInterval:60] autorelease];

[request setHTTPMethod: @"POST"];
[request setHTTPBody: myRequestData];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];

NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];  

NSArray * all = [NSHTTPCookie cookiesWithResponseHeaderFields:[response allHeaderFields] forURL:[NSURL URLWithString:@"http://server.com/login.php"]];

//int cid;

for (NSHTTPCookie *cookie in all) {
    NSLog(@"Name: %@ : Value: %@", cookie.name, cookie.value); 
//    cid = (int)cookie.value;
}

//  NSLog(@"id: %d",cid);

[myRequestString release];
[request release];

return 1;
}

Когда я нажимаю эту кнопку, моя программа падает и рядом с этой строкой:

NSArray * all = [NSHTTPCookie cookiesWithResponseHeaderFields:[response allHeaderFields] forURL:[NSURL URLWithString:@"http://sms.britecs.com/login.php"]];

у меня есть Thread1: Program received signal: "EXC_BAD_ACCESS" но не знаю как это исправить.

У меня есть еще один вопрос.Как я могу использовать эти куки на моем следующем экране?

Спасибо

1 Ответ

2 голосов
/ 11 мая 2011

С помощью [request release]; вы освобождаете автоматически освобожденный объект.Не делайте этого, он будет освобожден в следующем цикле цикла выполнения пулом автоматического выпуска.Удалите автоматическое освобождение в конце инициализации, и все в порядке, в противном случае удалите оператор release.

Здесь вы создаете его:

request = [[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://server.com/login.php"]
                                        cachePolicy:NSURLRequestReloadIgnoringCacheData 
                                    timeoutInterval:60] autorelease]; // <---
...