我认为我的错误很简单,但这就是问题所在。
目前我正在尝试使用ViewControllerB中的此块设置我的NSURL
-(IBAction)changeUrl:(id)sender{
globalURL = [NSURL URLWithString:
@"http://secretUrl.fileExstension"];
viewControllerA *viewA = [[viewControllerA alloc] initWithNibName:@"viewControllerA" bundle:nil];
viewA.globalURL = [[NSURL alloc] init];
viewA.globalURL = globalURL;
[viewA.globalURL release];
}
同时在viewControllerA中,我正在这样做。
if (globalURL == nil) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"LOL NSURL IS NIL!"
delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
}
else
{
// initates the request with set NSURL
}
所以主要的问题是NSURL在视图之间传递时没有正确保持它的值。
有什么想法?
答案 0 :(得分:1)
[viewA.globalURL release];
我认为上述行导致了问题。
答案 1 :(得分:1)
你不应该释放你的[viewA.globalURL release]
我假设您的globalURL
拥有保留属性。您的本地变量是一个自动释放的对象,因此您无需明确释放它。这样做会使您的引用计数为0,因此值将丢失。
答案 2 :(得分:1)
您似乎正在ViewControllerB中创建ViewControllerA。这是你的意图吗?如果你的目标是与已经存在的ViewControllerA进行通信,那么你就不会以正确的方式完成它。我通常通过让所有视图控制器共享一个共同的父级(例如app委托),然后通过该公共父级相互发送消息来完成此类事情。
示例:
MyAppDelegate *app = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
app.viewControllerA.globalURL=globalURL;
答案 3 :(得分:1)
-(IBAction)changeUrl:(id)sender{
globalURL = [NSURL URLWithString:
@"http://secretUrl.fileExstension"];
viewControllerA *viewA = [[viewControllerA alloc] initWithNibName:@"viewControllerA" bundle:nil];
// viewA.globalURL = [[NSURL alloc] init]; //allocate this init method for viewcontrollerA
viewA.globalURL = globalURL;
// [viewA.globalURL release]; // Dont release here.
}