繁体   English   中英

读取NSUserDefaults时出现“ EXEC_BAD_ACCESS”错误

[英]“EXEC_BAD_ACCESS” error when reading NSUserDefaults

读取NSUserDefaults(通过InAppSettingsKit)时出现错误。 我不确定这是否是我的代码。 我已经设置了一个观察者来检查NSUserDefaults是否有任何变化:

NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self
           selector:@selector(setOptions)  
               name:NSUserDefaultsDidChangeNotification
             object:nil];

此调用的方法用于更新MKMapView的“地图类型”:

- (void)setOptions
{
    // Get the map style
    NSString *mapStyle = [[NSUserDefaults standardUserDefaults] stringForKey:kMapType];

    // Update map style
    if ([mapStyle isEqualToString:@"Hybrid"]) 
    {
        map.mapType = MKMapTypeHybrid;
    }
    else if ([mapStyle isEqualToString:@"Map"]) 
    {
        map.mapType = MKMapTypeStandard;
    }
    else if ([mapStyle isEqualToString:@"Satellite"]) 
    {
        map.mapType = MKMapTypeSatellite;
    }

    [mapStyle release];
}

设置应用程序时,您可以按一下按钮并初始化InAppSettingsKit,在此过程中,我更改了要显示的地图类型的设置,并返回到应用程序的主屏幕。 此时,地图似乎已正确更新,并且没有问题。 当我尝试重新启动InAppSettingsKit以再次更改地图类型时,会发生此问题。

有谁知道是我的代码是问题,如果是的话,我该如何解决呢?

只需删除代码行即可: [mapStyle release]

stringForKey:将返回一个自动释放的NSString 因此,您的代码不负责发布。 它在第一个迭代中运行良好,因为第一个发布调用将NSUserDefaults该字符串,但NSUserDefaults仍然具有指向该字符串的指针,但未使用。 在第二个迭代中,您将获得该指针,并尝试在该已分配对象上调用isEqualToString ,这将导致BAD_ACCESS

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM