2012-10-15 52 views
0

我的iPhone應用程序是Tab based。在一個標籤中,說Security Tab我有三個視圖控制器First, Second, Third。我從Second視圖控制器傳遞一個字符串值到Third視圖控制器。 selectedAlertDesc是我的NSString對象Third視圖控制器。從另一個類獲得的NSString導致崩潰

Third視圖控制器:

@property (nonatomic,retain) NSString *selectedAlertDesc; 
@synthesize selectedAlertDesc = _selectedAlertDesc; 

Second視圖控制器:

Third *controller = [[Third alloc] init]; 
[controller setSelectedAlertDesc:[[alertArray objectAtIndex:indexPath.row] objectForKey:@"alertDesc"]]; 
[self.navigationController pushViewController:controller animated:YES]; 
[controller release]; 

它正常工作,直到我更改選項卡。如果我離開Third視圖控制器頁面中的安全選項卡並在訪問其他選項卡後回來,它會崩潰。它表示,selectedAlertDesc成爲殭屍。

-[CFString stringByReplacingOccurrencesOfString:withString:]: message sent to deallocated instance 0xeb3d760 

我怎樣才能解決這個問題呢?我相信我們不應該初始化合成對象。我在這裏忘了什麼嗎?

編輯:

作爲建議我用儀器檢查分配/保留歷史記錄。我得到以下幾點: - 所以在使用selectedAlertDesc後,我保留了它。這是正確的方式嗎?它工作正常!

_selectedAlertDesc = [_selectedAlertDesc stringByReplacingOccurrencesOfString:@"opentag" withString:@"<"]; 
_selectedAlertDesc = [_selectedAlertDesc stringByReplacingOccurrencesOfString:@"closetag" withString:@">"]; 
[txtTxtVw setText:_selectedAlertDesc]; 

enter image description here

+0

兩種可能性:使屬性'copy'而不是'retain';使用儀器及其殭屍模板來查看對象的保留歷史記錄 –

+0

您是否實施了構造函數 - (id)init執行「Third」 – AppleDelegate

+0

remove [controller release]; – Rupesh

回答

0

從評論:

事實證明,所述錯誤是由直接分配新值,以一個實例變量,而不是使用中的相關屬性的set...方法的代碼引起(或其相應的點符號)。這繞過屬性屬性並導致分配自動釋放字符串。

(主要線索是儀器保留歷史記錄中缺失的條目。)