0

一連のMKPolygonを作成し、それらをNSValueの配列に格納しています。

for (NSDictionary* country in countries) {
    NSMutableArray* polygons = [[NSMutableArray alloc] init];

    for (NSArray* polygon in [country objectForKey:@"polygons"]) {
        CLLocationCoordinate2D polygonCoords[polygon.count];

        int i;
        for (i = 0; i < polygon.count; i++) {
            NSValue* coords = [polygon objectAtIndex:i];
            CLLocationCoordinate2D stored_coords;
            [coords getValue:&stored_coords];
            polygonCoords[i] = stored_coords;
        }

        MKPolygon* poly = [MKPolygon polygonWithCoordinates:polygonCoords count:polygon.count];
        [polygons addObject:[NSValue valueWithBytes:&poly objCType:@encode(MKPolygon)]];
        [chillPillMap addOverlay:poly];
    }
    [country setValue:polygons forKey:@"polygon_objects"];
}

ただし、後でそれらにアクセスしようとすると、2つまたは3つが入り、EXC_BAD_ACCESSが発生します。

for (NSDictionary* country in countries) {
   NSArray* polygon_objects = [country objectForKey:@"polygon_objects"];
   int i;
   for (i = 0; i < polygon_objects.count; i++) {
        MKPolygon* saved_poly = [MKPolygon alloc];
        [[polygon_objects objectAtIndex:i] getValue:&saved_poly];
   }
}

これがなぜかわからない。

4

1 に答える 1

1

MKPolygon は Objective-C オブジェクトです。NSValue に変換せずに配列に入れることができます。さらに、バイトの値を取得するように NSValue に指示していますが、ポインターのアドレスを渡しています。悪いニュース。

なぜ...

[polygons addObject:poly]

それから...

MKPolygon *saved_poly = [polygon_objects objectAtIndex:i];
于 2012-04-24T23:58:50.880 に答える