在不同的视图中设置NSURL。当前视图的值为零

时间:2011-05-02 08:14:23

标签: iphone uiviewcontroller nsurl

我认为我的错误很简单,但这就是问题所在。

目前我正在尝试使用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在视图之间传递时没有正确保持它的值。

有什么想法?

4 个答案:

答案 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.



}