我是iOS开发的新手,我遇到了重用视图控制器的问题。
我的应用程序有一个登录视图,然后是一个包含用户详细信息的视图,我正在使用导航控制器来浏览它们。 我用username1登录... 当我触摸详细信息上的后退按钮时,我希望返回到登录视图(这实际上发生了)如果我尝试使用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?
因为,它授予访问权限但加载最后一个用户的数据......
同样,它第一次运行正常,如果用户输入了一些错误的参数,它会阻止登录......
答案 0 :(得分:1)
我猜你正在做类似的事情:
[self.navigationController pushViewController:self.detailVC animated:YES];
当然,这意味着您要在其中一个类中缓存详细控制器。旧视图显示的唯一方法是,如果您将旧视图提供给navcon。 navcon将视图控制器保留在其当前堆栈中 - 您无需自己保留它们。
通常推送视图控制器的方式如下:
UIViewController* detailVC = [[[MyDetailVC alloc] init] autorelease];
[self.navigationController pushViewController:detailVC animated:YES];
导航控制器将保留detailVC,直到它从堆栈弹出,此时它将被释放,其保留计数将变为0,并且它将被取消分配。
答案 1 :(得分:0)
我用HTTP Request解决了我的问题,需要用这行代码将cookie持久性设置为false:
[request setUseCookiePersistence:FALSE];