2011-05-02 77 views
0

我假設我的錯誤是一個非常簡單的錯誤,但是這是問題所在。在另一個視圖中設置NSURL。當前視圖的值爲零

目前,我正在嘗試設置我的NSURL與此塊從ViewControllerB

-(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在視圖間傳遞時沒有正確保持它的值。

有什麼想法?

回答

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. 



} 
1
[viewA.globalURL release]; 

我認爲上述行導致問題。

1

你不應該釋放你的[viewA.globalURL release] 我假設你的globalURL有一個保留屬性。你的局部變量是一個自動釋放的對象,因此你不需要明確地釋放它。這樣做會導致您的引用計數爲0,因此值會丟失。

+0

是感謝。看來,這個問題作爲一個負面的參考數量。 – doge 2011-05-02 08:40:05

1

看來你是在ViewControllerB中創建ViewControllerA。這是你的意圖嗎?如果你的目標是與一個已經存在的ViewControllerA進行通信,那麼你不會以正確的方式去處理它。我通常通過讓所有的視圖控制器共享一個共同的父代(例如應用程序代理),然後通過該共同的父代傳遞彼此的信息來完成這種事情。

實施例:

MyAppDelegate *app = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; 
    app.viewControllerA.globalURL=globalURL; 
+0

我的意圖不是創建ViewControllerA。我的意圖是實例化視圖來訪問視圖的變量並進行設置。我確信我的方法遠沒有標準,但是我在其他視圖中訪問其他視圖變量,並且它一直工作到現在。 您發佈的這個例子是否必須以任何方式在IB中連接,或者這只是工作? – doge 2011-05-02 08:27:40

+0

您發佈的示例代碼將創建ViewControllerA的新實例,因此如果您有另一個已經顯示的實例,這很可能會導致一些問題。我通常根本不使用IB,因此對於示例代碼,所有您需要的是對您的ViewControllerA進行@ property'd @綜合引用。你也可能想從你的ViewControllerB.m文件中導入MyAppDelegate.h&ViewControllerA.h。 – Sam 2011-05-02 08:34:06

相關問題