Iphone &引用;执行“错误访问”;读取NSUserDefault时出错
我在读取NSUserDefaults(通过InAppSettingsKit)时出错。我不确定问题出在我的代码上。我已经设置了一个观察者来检查NSUserDefaults是否有任何更改: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
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
,这将导致错误的访问