我在从viewDidLoad()调用的函数中以异步模式使用ASIHTTPRequest
NSURL *url = [NSURL URLWithString:@"http://somewebsite.com/data.txt"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request startAsynchronous];
这是我的requestFinished(),其中我做了一些文本替换,并使用我从网站收到的数据填充NSArray。它只是文本,每行一个数据项。 viedDidLoad()中的NSArray(和alloc / init)。
- (void)requestFinished:(ASIHTTPRequest *)request
{
NSString *sTemp = [request responseString];
sTemp = [sTemp stringByReplacingOccurrencesOfString:@"\n" withString:@","];
arrayTidalData = [sTemp componentsSeparatedByString:@","];
NSLog(@"Loaded %d items into the array",[arrayTidalData count]);
[tableTideTimes reloadData];
}
NSLog报告127个数据项。
现在,我使用NSArray数据来填充UITableView。 但是,在我尝试访问NSArray(arrayTidalData)时,在cellForRowAtIndexPath()中,例如通过计数,我得到以下内容:
TideTimes [14696:b303] * - [__ NSArrayM count]:发送到解除分配的实例0x4e6c6a0的消息
(我打开NSZOMBIEEnabled = YES获取此数据)
似乎NSArray在我使用之前已被解除分配。我还尝试使用requestFinish()中的数据填充NSString但得到了相同的结果。
我错过了一些非常简单的事情,还是我做了一件非常错误的事情?
(这是我第一次使用ASIHTTPRequest)
答案 0 :(得分:1)
替换
arrayTidalData = [sTemp componentsSeparatedByString:@","];
与
arrayTidalData = [[sTemp componentsSeparatedByString:@","] retain];
这是因为componentsSeparatedByString:
返回autoreleased
个对象。因此,方法released
结束工作后requestFinished:
。
不要忘记在工作结束时发布(例如,dealloc
)。