我有一个视图控制器,列出UITableView
中的一些数据。为了获取下载的数据,我使用了ASIHTTPRequest
我在其他类中放入的方法。
在我的视图控制器中,我已设置适当的委托来处理从ASIHTTPRequest
检索的数据。因此,从- viewDidLoad
中的视图控制器,我分配并初始化包含ASIHTTPRequest
方法的类,如下所示:
self.officesParser = [[[OfficesParser alloc] init] autorelease]; // retained property
然后在- viewDidAppear:
我致电[officesParser downloadOffices];
我的- downloadOffices
方法如下所示:
- (void)downloadOffices {
// 1. Downloaded offices.json
NSURL *officesUrl = [NSURL URLWithString:@"http://example.com/example.json"];
ASIHTTPRequest *officesRequest = [ASIHTTPRequest requestWithURL:officesUrl];
// Always ask the server if there is new content available,
// If the request fails, use data from the cache even if it should have expired.
[officesRequest setCachePolicy:ASIAskServerIfModifiedCachePolicy|ASIFallbackToCacheIfLoadFailsCachePolicy];
// Store the cache permanently
[officesRequest setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
[officesRequest setTag:1];
OfficesViewController *vc = [[OfficesViewController alloc] init];
[officesRequest setDelegate:vc];
[vc release];
[officesRequest startAsynchronous];
}
每次调用[officesParser downloadOffices]
方法后,我都会得到:
*** -[OfficesViewController respondsToSelector:]: message sent to deallocated instance 0x6a2f6c0
我在这里做错了什么?
答案 0 :(得分:3)
您希望vc
成为officesRequest
的委托,但是,在分配并初始化vc
并将其设置为委托后,您会立即释放它。请注意,代理属性通常为assign
,而非retain
。然后,您负责保持您的委托对象,直到不再需要为止。因此,如果您计划在不久的将来向其发送消息,则无法立即将其发布。