簡體   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