2011-10-31 104 views
1

我已經通過委託將NSArray值傳遞迴父視圖。- [__ NSArrayI isEqualToString:]:發送到已釋放實例的消息

其被接收在父視圖,像這樣

- (void) setManufactureSearchFields:(NSArray *)arrayValues withIndexPath:(NSIndexPath *)myIndexPath 
{ 
    manufactureSearchObjectString = [arrayValues valueForKey:@"MANUFACTURER"]; 
    NSLog(@"%@",[arrayValues valueForKey:@"MANUFACTURER"]); 
    manufactureResultIndexPath = myIndexPath; 
    [self.tableView reloadData]; //reloads the tabels so you can see the value in the tableViewCell. 
} 

如果我是執行此代碼,並選擇它顯然執行委託childview的的TableCell但然後凍結向上和火災此錯誤的日誌

2011-10-31 14:06:16.670 code[12610:207] (
    "Alfa Romeo" 
) 
2011-10-31 14:06:16.673 code[12610:207] *** -[__NSArrayI isEqualToString:]: message sent to deallocated instance 0x6859280 

但是如果我註釋掉下面一行在我的委託方法

- (void) setManufactureSearchFields:(NSArray *)arrayValues withIndexPath:(NSIndexPath *)myIndexPath 
    { 
     //manufactureSearchObjectString = [arrayValues valueForKey:@"MANUFACTURER"]; 
     NSLog(@"%@",[arrayValues valueForKey:@"MANUFACTURER"]); 
     manufactureResultIndexPath = myIndexPath; 
     [self.tableView reloadData]; //reloads the tabels so you can see the value in the tableViewCell. 
    } 

它不會崩潰,我最終用NSLog在我的日誌中記錄了正確的細節。

2011-10-31 14:09:28.200 code[12737:207] (
    Sony 
) 

我希望以前有人遇到過這樣的問題,這是我的數組對象看起來像一個值的字典。

ISELECT = F; 
ISALIVE = T; 
MANUFACTURER = Sony; 
MANUFACTURERID = 3; 
+0

你的其中一把鑰匙不是。由於您發佈的版本過多,因此它已被釋放。 –

+0

代碼的其他部分可能存在問題。你有沒有在其他地方使用manufactureSearchObjectString? – Bird

+0

是啊我在想同樣的事情,現在的錯誤顯示在哪裏,我將價值超過一個uilabel像這樣** label2.text = manufactureSearchObjectString; **我相信是錯誤的但不知道如何解決,因爲我試圖把一個數組放入文本值,我想我需要做isequaltostring什麼的? –

回答

0

試着改變你的代碼如下:

- (void) setManufactureSearchFields:(NSDictionary *)arrayValues withIndexPath:(NSIndexPath *)myIndexPath 
{ 
    manufactureSearchObjectString = [[arrayValues valueForKey:@"MANUFACTURER"] copy]; 
    NSLog(@"%@",[arrayValues valueForKey:@"MANUFACTURER"]); 
    manufactureResultIndexPath = myIndexPath; 
    [self.tableView reloadData]; //reloads the tabels so you can see the value in the tableViewCell. 
} 

請注意,我也改變了變量類型的arrayValuesNSDictionary。讓我知道這是否適合你。

+0

我傳遞給它一個數組值,所以我不能改變爲nsdictionary。我試過你的代碼的複製版本,它仍然有相同的錯誤...但是現在它突出顯示了我的代碼的不同部分,如上所述的錯誤。當我設置我的textfield標籤來顯示製造價值時,我會去做這件事情......顯然它是錯的。但我不知道爲什麼。 ** label2.text = manufactureSearchObjectString; ** –

+0

也許是因爲即時通訊它的數組值爲字符串? –

1

valueForKey:返回一個自動釋放實例。除非你保留它,否則你可以期望在你從當前方法返回之後的某個時候它會被釋放。看起來你正在將它分配給一個實例變量。如果你這樣做,你需要保留它。

manufactureSearchObjectString = [arrayValues valueForKey:@"MANUFACTURER"]; 
[manufactureSearchObjectString retain]; 

但它看起來像你有另一個問題。

[arrayValues valueForKey:@"MANUFACTURER"]; 

返回一個數組。

manufactureSearchObjectString = [arrayValues valueForKey:@"MANUFACTURER"]; 

通過您的變量的名稱,它看起來好像您將它分配給一個字符串變量。所以如果你解決了保留問題,那麼你將會有另一個錯誤。當你嘗試調用isEqualToString時,你會得到一個無法識別的選擇器。

您需要爲manufactureSearchObjectString指定一個字符串值。你需要弄清楚你想要的是什麼字符串值。在這種情況下,你的數組中只有一個字符串,所以我想你想要那個。在這種情況下

manufactureSearchObjectString = [[arrayValues valueForKey:@"MANUFACTURER"] objectAtIndex:0]; 
[manufactureSearchObjectString retain]; 

但一般而言,您需要檢查是否有數組中的多個值,並且決定你想要哪一個,並檢查是否有數組中的任何值,並做一些事情正確處理。

+0

很酷的歡呼,我檢查,看看它是否有效,但它的劑量,但我會考慮你的意見,並做更多的閱讀。至少目前爲止,儘管我知道它可能做我想要實現的事情,但只需要清理它就可以了。 –

0

請將其轉換爲NSString。

NSString *manufact=[NSString stringWithFormat:@"%@",[arrayValues valueForKey:@"MANUFACTURER"]; 

它不會崩潰。

相關問題