Iphone iOS:将对象传递到ASIHTTPRequest块?

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:^{

我试图创建一个使用ASIHTTPRequest的函数,并返回MyPhotoSource类的一个实例,如下所示

- (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,则此函数不返回任何内容,然后将其填充到块中,并调用某种更新函数或通知。