2011-03-18 102 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;