objective-c - EXC_BAD_ACCESS 从 NSValue 获取值

标签 objective-c ios mapkit

我正在构建一系列 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"];
}

但是,当我稍后尝试访问它们时,我得到了两个或三个,并且发生了 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];
   }
}

不知道这是为什么。

最佳答案

MKPolygon 是一个 Objective-C 对象。您可以将其放入数组中,而无需将其转换为 NSValue。此外,您告诉 NSValue 获取字节的值,但您向其传递的是指针的地址。坏消息。

为什么不只是...

[polygons addObject:poly]

然后...

MKPolygon *saved_poly = [polygon_objects objectAtIndex:i];

关于objective-c - EXC_BAD_ACCESS 从 NSValue 获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10307532/

相关文章:

objective-c - 向 NavigationViewController 的后退按钮添加一些操作

ios - Objective C 的 Swift 语法

ios - Swift + didUpdateUserLocation 没有被调用

ios - 在 MapKit 中用 segue 替换 pushViewController

ios - 如何设置 MDCMultilineTextField 中 float 占位符的正常颜色?

ios - Swift MapKit 自定义当前位置标记

ios - MobileSubstrate - 检查对象在哪个包中

ios - NSFileManager:删除项目

ios - 如何使用xcodebuild命令行工具在Windows系统中构建iOS项目

ios - UINavigationbar 会在 UISearchbar 结束搜索后显示,如何隐藏导航栏