iOS重新重用ViewControllers或ASIHTTPRequest问题?

时间:2011-08-31 14:47:20

标签: ios uiviewcontroller uinavigationcontroller asihttprequest

我是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?

因为,它授予访问权限但加载最后一个用户的数据......

同样,它第一次运行正常,如果用户输入了一些错误的参数,它会阻止登录......

2 个答案:

答案 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];