iOS сбрасывает повторно использованные ViewControllers или проблема с ASIHTTPRequest? - PullRequest
0 голосов
/ 31 августа 2011

Я новичок в разработке для iOS, и у меня возникла проблема с повторно используемыми контроллерами представления.

У моего приложения есть представление входа в систему, а затем представление с информацией о пользователе, я использую навигациюконтроллер для навигации по ним.Я вхожу с именем пользователя1 ... Когда я касаюсь кнопки «Назад» в представлении сведений, я хочу вернуться к представлению входа в систему (и это действительно происходит), если я пытаюсь войти в систему с именем пользователя2, открывается окно сведений о имени пользователя1 (например, его вид).повторного использования в стеке навигационного контроллера).когда я выскакиваю представление из стека навигационного контроллера, оно просто возвращается назад и не освобождается ... Как я могу сбросить информацию о представлении подробностей или что-то в этом роде, или, возможно, сбросить стек навигационного контроллера?

здесь я показываю некоторый код:

self.myVC = [[[myVC alloc] initWithNibName:@"MyVC" bundle:[NSBundle mainBundle]] autorelease];        

[self.navigationController popViewControllerAnimated:NO];
[self.navigationController pushViewController:self.myVC animated:NO];

На самом деле, недавно я обнаружил проблему с логином, связанную с ASIHTTPRequest, который я использую.Я публикую свой код для входа, чтобы вы, ребята, могли взглянуть ...

-(IBAction)loginGivenUserName:(NSString *)username andPassword:(NSString *)password{

    NSURL *url = [NSURL URLWithString:@"http://foo.heroku.com/users/login.json"];
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request setUsername:username];
    [request setPassword:password];
    [request setRequestMethod:@"POST"];
    [request setDelegate:self];
    [request startAsynchronous];

}

Впервые он отлично работает, когда пользователь входит в систему ... Но когда он возвращается и пытается войтиопять же, он отвечает кодом 200 с любыми переданными параметрами ...

Я уже отлажен, он передает параметры правильно, но ответ неправильный, сохраняет ли этот HTTPRequest какой-то файл cookie?

Потому что он предоставляет доступ, но загружает данные последнего пользователя ...

Опять же, в первый раз он работает просто отлично, если пользователь вводит какие-то неправильные параметры, он блокирует вход в систему ...

Ответы [ 2 ]

1 голос
/ 31 августа 2011

Я предполагаю, что вы делаете что-то вроде:

[self.navigationController pushViewController:self.detailVC animated:YES];

, что, конечно, означает, что вы кэшируете контроллер детализации в одном из ваших классов.Единственный способ показать старое представление - это если вы передадите старое представление navcon.Navcon сохраняет контроллеры представления в своем текущем стеке - вам не нужно сохранять их самостоятельно.

Обычно способ отправки контроллера представления выглядит следующим образом:

UIViewController* detailVC = [[[MyDetailVC alloc] init] autorelease];
[self.navigationController pushViewController:detailVC animated:YES];

НавигацияКонтроллер будет удерживать detailVC до тех пор, пока он не будет извлечен из стека, и в этот момент он будет освобожден, его счетчик сохранится до 0, и он будет освобожден.

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

Я решил свою проблему с HTTPRequest, для этого нужно было установить постоянство coockie в false с помощью этой строки кода:

[request setUseCookiePersistence:FALSE];
...