Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone &引用;执行“错误访问”;读取NSUserDefault时出错_Iphone_Settings_Nsuserdefaults_Exc Bad Access - Fatal编程技术网

Iphone &引用;执行“错误访问”;读取NSUserDefault时出错

Iphone &引用;执行“错误访问”;读取NSUserDefault时出错,iphone,settings,nsuserdefaults,exc-bad-access,Iphone,Settings,Nsuserdefaults,Exc Bad Access,我在读取NSUserDefaults(通过InAppSettingsKit)时出错。我不确定问题出在我的代码上。我已经设置了一个观察者来检查NSUserDefaults是否有任何更改: NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; [center addObserver:self selector:@selector(setOptions) name

我在读取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
仍然有一个指向该字符串的指针,但没有使用。在第二次迭代中,您将获得该指针,并尝试对该解除锁定的对象调用
isEqualToString
,这将导致错误的访问只需删除代码行:
[mapStyle release]

stringForKey:
将返回自动删除的
NSString
。因此,您的代码不负责发布。它在第一次迭代中工作正常,因为第一次发布调用将解除锁定该字符串,但是
NSUserDefaults
仍然有一个指向该字符串的指针,但没有使用。在第二次迭代中,您将获得该指针,并尝试对该解除锁定的对象调用
isEqualToString
,这将导致错误的访问