EXC_BAD_ACCESS (SIGSEGV) - KERN_INVALID_ADDRESS

5
我已经上传了这个应用程序,但是遭到了驳回并被指出发生了崩溃。具体原因是:我们发现您的应用在运行iOS 7版本的iPad上出现崩溃,这与App Store审核指南不符。
可能是由于我当时上传的时候,iOS 7还未推出。
崩溃报告如下:
Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0xb1b1f20b

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x3a2f5b26 objc_msgSend + 6
1   MapKit                          0x30ca46a6 -[MKMapView mapViewDidFinishLoadingTiles:] + 46
2   VectorKit                       0x376bbaf4 -[VKTileSource didFinishWithNetwork] + 68
3   VectorKit                       0x376bc196 __32-[VKTileSource performDownload:]_block_invoke126 + 38
4   GeoServices                     0x345b6fdc ___ZNK49-[GEOTileLoaderInternal _loadedTile:forKey:info:]66__49-[GEOTileLoaderInternal _loadedTile:forKey:info:]_block_invoke3$_1clERKN8LoadItem9RequesterE_block_invoke_2 + 52
5   libdispatch.dylib               0x3a7ddd78 _dispatch_call_block_and_release + 8
6   libdispatch.dylib               0x3a7ddd64 _dispatch_client_callout + 20
7   libdispatch.dylib               0x3a7e47bc _dispatch_main_queue_callback_4CF$VARIANT$mp + 264
8   CoreFoundation                  0x2fab881c __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 4
9   CoreFoundation                  0x2fab70f0 __CFRunLoopRun + 1296
10  CoreFoundation                  0x2fa21ce2 CFRunLoopRunSpecific + 518
11  CoreFoundation                  0x2fa21ac6 CFRunLoopRunInMode + 102
12  GraphicsServices                0x3471c27e GSEventRunModal + 134
13  UIKit                           0x322c3a3c UIApplicationMain + 1132

在崩溃日志中,我们看到 MapKit 0x30ca46a6 -[MKMapView mapViewDidFinishLoadingTiles:]

是MapKit出了问题吗?

关于MapKit,以下是我所知道的:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.title = @"Location";
    // Do any additional setup after loading the view.
    CLLocationCoordinate2D cords = {29.32511601390379, 48.08847418705136};
    MKCoordinateSpan span = {0.008400,0.008400};
    region = (MKCoordinateRegion) {cords,span};
    mapView.showsUserLocation = YES;
    [mapView setRegion:region animated:YES];
    [mapView setDelegate:self];

    DisplayMap *ann = [[DisplayMap alloc] init];
    ann.coordinate = region.center;
    [mapView addAnnotation:ann];
}

此外,我的mapkitviewcontroller中没有dealloc方法。这样可以吗?我问这个问题是因为这个错误与内存管理有关。

我的应用程序有5个选项卡。前4个选项卡只是UIWebView。对于webView,我发现我没有将它放在dealloc中。以下是我在webView中的代码:

- (void)dealloc {
    [super dealloc];
}

现在我的 Xcode 上没有 iOS 7 版本。我需要下载,但在此之前想问一下。

注意:iOS 6 版本一切正常。

你有什么猜测为什么会出现这个错误吗?

2个回答

4

在离开页面之前,请将地图视图委托设置为nil。另外,我认为iOS地图存在一些内存管理问题。因此最好在dealloc方法中释放地图。


我通过在我的委托的dealloc方法中将地图视图委托设置为nil来解决了这个问题。对我来说,这并没有太多意义,因为Apple的MKMapView实现应该维护对委托的弱引用。但是谁知道,在iOS 7的MKMapView实现中可能存在一些错误的代码。 - Chris

0

当我将mapView放在dealloc中时,问题得到了解决。

进一步调查发现,我还没有为DisplayMap添加标题。

DisplayMap *ann = [[DisplayMap alloc] init];
ann.title = @"My Location";

1
你是否明确将其设置为 nil?我遇到了同样的问题,在 Crittercism 报告中看到崩溃,但自己无法复现。 - Henrik Hartz
@HenrikHartz:之前我有 ann.title = @"" - Fahim Parkar
@HenrikHartz,你找到原因了吗?我在Crashlytics报告中看到了相同的问题,但是自己无法复现。 - Chris
@Chris,我无法重现这个问题。 - Henrik Hartz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接