0

私は昨日尋ねたこの質問のフォローアップとして書いていますが、元の回答者からの返信はありません。お待ちしておりますが、時間制限があります。彼は私の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);
        });

}
4

1 に答える 1

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); 
}];
于 2012-12-19T19:41:41.300 に答える