0

MKMapkit のカスタム クラスを保持する NSMutableArray があります。

MapPoint *placeObject = [[MapPoint alloc] initWithTitle:title subtitle:subtitle coordinate:loc description:description storeImage:storeImage];
[annotationArray addObject:placeObject];

私のルーチンは、placeObject非同期にロードされ、数秒後に終了するため、画像なしで埋めます。今私の質問は次のとおりです。placeObject内にあるを変更する方法はありannotationArrayますか?

編集

私の問題をより良い方法で表示するには、いくつかのコード部分を以下に示します。

if (annotationArray == nil)
{
    [self setAnnotationArray:[[NSMutableArray alloc] init]];
}
for (NSDictionary *locationDetails in parser.items)
{
    __block NSData *storeImageData;
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);
    dispatch_async(queue, ^{
        storeImageData = [NSData dataWithContentsOfURL:storeImageURL];

        dispatch_sync(dispatch_get_main_queue(), ^{
            UIImage *storeImageTMP = [UIImage imageWithData:storeImageData];
            counterBlock ++;
            NSLog(@"async: %d", counterBlock);
            [imageArray addObject:storeImageTMP];
            });
        });
MapPoint *placeObject = [[MapPoint alloc] initWithTitle:title subtitle:subtitle coordinate:loc description:description storeImage:storeImage];
[annotationArray addObject:placeObject];
}
[mapView addAnnotations:annotationArray];

これが完了した後:dispatch_queue_t作業を開始します。そのため、完全にロードされているかどうかを2秒ごとに確認します。次に、annotationArray の変更を開始し、注釈を更新します (すべてを削除 -> 追加の画像をマップに追加)

- (void) checkMap
{
    if (counterBlock == 547)
    {
        for (int i=0; i<=counterBlock; i++)
        {
            MapPoint *point = annotationArray[i];
            point.storeImage = imageArray[i];
        }
        if(timer)
        {
            [timer invalidate];
            timer = nil;
        }
        [mapView removeAnnotations:mapView.annotations];
        [mapView addAnnotations:annotationArray];
    }
}
4

3 に答える 3

4

必要なのはMapPoint、配列内のオブジェクトの 1 つへの参照を取得することだけです。次に、必要に応じてオブジェクトのプロパティを設定したり、メソッドを呼び出したりできます。

MapPoint *point = annotationArray[x]; // x is whatever index you need
point.image = ... // some image
于 2013-05-02T15:57:25.997 に答える
0

MapPoint インスタンスの placeObject はポインターです。したがって、それを配列に追加しても placeObject は値でコピーされませんが、実際にはそのアドレスが保持されます。配列からオブジェクトのアドレスを取得すると、それを操作できます。

annotationArray[objectIndex].anything = anything you want
于 2013-05-02T16:36:42.527 に答える