2010-07-26 74 views
1

我是iPhone開發新手,我有一個EXC_BAD_ACCESS錯誤。錯誤EXC_BAD_ACCESS

在我的.h文件,我宣佈:

NSString *myString; 

在我的.m文件,我有兩種方法:

1. CLLocationManager接口(無效)的LocationManager,當我做到這一點:

myString = [NSString stringWithFormat:@"%lf",loc.longitude]; 
NSLog(@"%@",myString); // it works 

2.A(無效)sendPosition法:

NSLog(@"%@",myString); // EXC_BAD_ACCESS 

你能幫我嗎?

回答

2
  1. 保留你的字符串。

    myString = [[NSString stringWithFormat:@「%lf」,loc.longitude] retain];

  2. 然後,在這個類的您的dealloc方法(或將其添加)

    - (無效)的dealloc { [超級的dealloc]; [myString release]; }

應該修復它,假設你已經在你的.h文件中聲明瞭myString。

+0

這是因爲NSString是自動發佈的,如果你想讓它掛起,需要保留它。或者,你可以使它成爲一個保留的屬性,而不必調用retain(注意你仍然必須在dealloc中釋放它) – jrtc27 2010-07-26 10:26:27

+0

謝謝,它可以工作,但myString的值可能會改變。有了保留,價值永遠是一樣的。 – 2010-07-26 10:55:57

+1

如果您的值可以更改,請使用可變字符串,然後更改該值。否則,釋放它並在創建新值時再次設置它。說真的,看看我的答案,閱讀規則(你需要了解他們),當你遇到這樣的問題時,停下來思考。通常有一個簡單的解決方案。 – jer 2010-07-26 11:07:06

1

您是否將yourString保留在locationManager方法的其他位置?如果沒有,你應該,然後在你的-dealloc方法中釋放它。否則,它可能會消失,就像我懷疑現在正在發生的事情。請閱讀rules for memory management

我建議的是創建一個屬性,該屬性在您的類上自動保留該值,然後在創建字符串時用點表示法賦值。再次,在你的dealloc方法中釋放它。對於這種類型的代碼,這是習慣用法。