0

我是iOS開發新手,我在重用視圖控制器時遇到問題。iOS重置重用的ViewControllers或問題與ASIHTTPRequest?

我的應用程序有一個登錄視圖,然後是一個包含用戶詳細信息的視圖,我正在使用導航控制器來瀏覽它們。 我使用用戶名1登錄... 當我觸摸後退按鈕的詳細信息查看我希望返回登錄視圖(實際發生這種情況),如果我嘗試使用username2登錄它打開用戶名1的詳細信息視圖(couse它在導航控制器的棧中重用)。 當我從導航控制器的堆棧中彈出一個視圖時,它只是返回並且未取消分配... 如何重置詳細信息視圖的信息或類似信息,或者可能重置導航控制器的堆棧?

這裏我展示了一些代碼:

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嗎?

因爲,它授予訪問權限,但加載了最後一個用戶的數據...

再次,它工作得很好,第一次,如果用戶把一些錯誤的參數是塊登錄...

+0

請張貼一些示例代碼,以便社會可以更好地幫助你。用於輸入Q的編輯器有一個代碼塊按鈕。 – Sam

+0

爲什麼您的應用程序的用戶需要導航回登錄屏幕?您可能需要考慮導航是否真的是登錄的正確UI模式。 – jlehr

+0

實際上它就像一個「註銷」功能,我的老闆說它需要一個...所以我需要找到一種方法來做到這一點.. – JRafaelM

回答

1

我猜你正在做的事情,如:

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

其中,當然,這意味着你在你的類中的一個緩存細節控制器。舊觀點能夠顯示出來的唯一方法就是如果你將舊觀點提供給navcon。 navcon將視圖控制器保留在當前堆棧中 - 您不需要自己保留它們。

一般推視圖控制器的方式是像這樣的:

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

導航控制器將保留detailVC,直到它被彈出堆棧,此時它會得到釋放,其保留計數會去0,它會被釋放。

+0

我不會使用'autorelease',特別是如果'detailVC'及其子視圖和數據特別大。 – Hyperbole

+0

它解決了我的問題與控制器,但我仍然有問題的HTTPRequest – JRafaelM

0

我解決了我的問題的HTTPRequest,其設置coockie持久性假與這行代碼需要:

[request setUseCookiePersistence:FALSE];