2011-03-18 65 views
0

我正在發出一個(異步)url請求。NSURLConnection保存變量不起作用

在代理函數connectionDidFinishLoading我將服務器的響應分配給一個實例變量。

我提出請求後等待幾秒鐘,我確定我已收到回覆。

我有一個按鈕鏈接到一個IBAction打印出這個變量給NSLog,但它總是空。

我不知道發生了什麼事。 url請求是否啓動一個新的線程並保存了任何變量,在主線程中無法訪問...或者爲什麼地球上我看不到任何保存的變量。

我可以正確使用connectionDidFinishLoading中的接收數據,但是當我將這些數據分配給實例變量並嘗試在函數外訪問它們時,它們總是爲空。

TL; DR 我該如何保存響應或URL請求以備後用!

在此先感謝。

+0

...爲什麼不把NSLog()放入''connectionDidFinishLoading'方法?因爲聽起來你所做的只是將響應分配給委託方法中的變量,而不記錄任何內容。很顯然,看到一些代碼在這裏有所幫助 - 但是「肯定」和毫無疑問是不一樣的。 – lxt 2011-03-18 23:46:00

+0

感謝您的回覆。代碼分佈在多個類中,我認爲這很不明確。我將盡我所能解釋:現在我將它記錄在委託中,這就是我知道我正在接收正確的數據。當我將這些數據保存到一個實例變量並嘗試在稍後的另一個時間訪問它時,會發生問題......它始終爲空。謝謝。 – klyngbaek 2011-03-19 00:00:21

回答

0

問題可能是您沒有保留內存,因此它會被自動釋放。您正在分配的實例變量是否是指定了「retain」或「copy」的屬性?您也可以手動調用保留對象本身上設置後:

[myString retain]; 

使用屬性是管理一個更好的辦法,例如.H:

@interface MyClass: Object { 
    NSString *myString; 
} 
@property (nonatomic, retain) NSString *myString; 

在別處.M:

@synthesize myString  
... 
... 
self.myString = ... 

這將確保該字符串是不是你釋放,直到你想:

[myString release]; 
self.myString = NULL;