Iphone iOS:将对象传递到ASIHTTPRequest块?
我试图创建一个使用ASIHTTPRequest的函数,并返回MyPhotoSource类的一个实例,如下所示Iphone iOS:将对象传递到ASIHTTPRequest块?,iphone,objective-c,reference,asihttprequest,block,Iphone,Objective C,Reference,Asihttprequest,Block,我试图创建一个使用ASIHTTPRequest的函数,并返回MyPhotoSource类的一个实例,如下所示 - (MyPhotoSource *) photoSourceForURL:(NSURL *)url { MyPhotoSource *source; __block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request setCompletionBlock:^{
- (MyPhotoSource *) photoSourceForURL:(NSURL *)url {
MyPhotoSource *source;
__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setCompletionBlock:^{
.....
source = [[MyPhotoSource alloc] initWithPhotos:photoArray];
}];
[request startAsynchronous];
return source;
}
当我构建项目时,它会给我分配一个只读变量“source”错误消息
我尝试了以下修改,但是项目在运行时崩溃了
__block MyPhotoSource *source;
您不需要在
ASIHTTPRequest
上设置\u块
。崩溃可能是由于返回源代码
将始终返回nil
,因为对象直到在块内才初始化。这在另一个线程上异步发生。因此,稍后在应用程序中尝试使用返回的对象时,您可能会遇到问题,因为它是nil
,或者我不确定一旦块运行,该对象将如何优雅地更新…您是对的。我将其更改为同步请求,效果很好。因此,将对象安全地传递到异步请求块是不可能的?我不确定您希望在这段代码中得到什么,但当您使用异步回调时,通常会更新像ivar一样的持久对象。因此,如果您只有一个或几个MyPhotoSource
对象使其成为IVAR,则此函数不返回任何内容,然后将其填充到块中,并调用某种更新函数或通知。