iPhone - 设置采用数组的块时出错

时间:2012-12-19 18:24:52

标签: iphone asynchronous objective-c-blocks

我正在撰写作为我昨天问过的this问题的后续文章,但我没有收到原始回复者的回复。我很乐意等待,但我有一个很小的时间限制。他用我的NSURLConnection代码帮助了我很多,我完全理解这是如何工作的,但我似乎无法正确理解语法。

我无法获得处理程序:^被识别并且这一行:

[self loadImageArray:urlArray handler:^(NSMutableArray *)imageArray

并且需要使用填充了图像的数组(来自loadImageArray的imageArray)。

- (void)loadImageArray:(NSArray *)urls handler:(void(^)( handler)

这应该从服务器异步填充一个数组(imageArray)。

如何正确设置阻止调用?我已经阅读了几个网站上的块,但没有一个建议有所帮助。

同样,我已经问过原来的响应者,但没有收到回复。

我希望编辑有所帮助。谢谢!

这是我的.h

@interface OBNSURLViewController : UIViewController
{
    NSArray *jsonArray;
    NSMutableData *theJsonData;
    IBOutlet UIView *mainView;
    __weak IBOutlet UIImageView *mainImage;
    __weak IBOutlet UILabel *mainLabel;

}
@property (nonatomic, strong) NSData *serverData;
@property (strong, nonatomic) IBOutlet UIScrollView *mainScroll;
@property (nonatomic, retain) NSMutableArray *imageArray;
@property (nonatomic, retain) NSMutableArray *urlArray;
@property (nonatomic, retain) UIImage *imageData;
@end

这是我坚持使用的相关代码:

- (void)parseJSONAndGetImages:(NSData *)data
{
    //initialize urlArray
    urlArray = [[NSMutableArray alloc]init];
    //parse JSON and load into jsonArray
    jsonArray = [NSJSONSerialization JSONObjectWithData:theJsonData options:nil error:nil];
    //assertion?
    assert([jsonArray isKindOfClass:[NSArray class]]);

    //Make into one liner with KVC.... Find out what KVC is

    //Code to load url's into array goes here....

    //load the images into scrollview after fetching from server
    [self loadImageArray:urlArray handler:^(NSMutableArray *)imageArray //Here is a big problem area
     {
         //work goes here....
     }];
}

- (void)loadImageArray:(NSArray *)urls handler:(void(^)( handler)//This does not want to work either. I am stuck on handler???
{ dispatch_async(0, ^{
        //imageArray = [NSMutableArray array];
        for (int y = 0; y < urlArray.count; y++)
        {
            //stuff goes here.....a
    });
        dispatch_async(dispath_get_main_queue(),^{
            handler(imageArray);
        });

}

1 个答案:

答案 0 :(得分:3)

在我阅读本文时,方法语法应如下所示。如果处理程序块接受了一个参数,则需要声明它是。

- (void)loadImageArray:(NSArray *)urls handler:(void (^)(NSMutableArray *imageArray))handler
{
    NSMutableArray *imageArray = [NSMutableArray array];

    // Do something with the urls array to fill in entries in imageArray...

    handler(imageArray);
}

你可以这样调用这个方法:

NSArray *urls = // filled in somewhere else...
[myObject loadImageArray:urls handler:^(NSArray *imageArray) { 
    NSLog(@"%@", imageArray); 
}];