我是iOS开发的新手,我对重用的视图控制器有疑问。
我的应用程序有一个登录视图,然后是一个包含用户详细信息的视图,我正在使用导航控制器来浏览他们。
我使用用户名1登录...
当我触摸详细信息视图上的后退按钮时,如果我尝试使用username2登录,则希望返回登录视图(这实际上是发生的),它会打开username1的详细信息视图(因为在导航控制器中会重复使用这种视图)。的堆栈)。
当我从导航控制器的堆栈中弹出视图时,它只是退回而未释放...
如何重置详细信息视图或类似信息的信息,或者重置导航控制器的堆栈?
在这里,我显示一些代码:
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?
因为,它会授予访问权限,但会加载最后一个用户的数据...
同样,如果用户输入了错误的参数,它将阻止登录,这第一次还是可以的。
最佳答案
我猜你正在做类似的事情:
[self.navigationController pushViewController:self.detailVC animated:YES];
当然,这意味着您要在一个类中缓存详细信息控制器。显示旧视图的唯一方法是将旧视图提供给navcon。 navcon将视图控制器保留在当前堆栈中-您无需自己保留它们。
通常,推送视图控制器的方式如下:
UIViewController* detailVC = [[[MyDetailVC alloc] init] autorelease];
[self.navigationController pushViewController:detailVC animated:YES];
导航控制器将保留detailVC,直到将其从堆栈中弹出为止,这时它将被释放,其保留计数将变为0,并将被释放。
关于ios - iOS重置重用的ViewController还是ASIHTTPRequest问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7258754/