[英]“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.