2010-11-13 101 views
0

在我的iPhone應用程序中,我已經在TableView上實現了SearchBar。NSMutableArray即使設置屬性後仍不保留值

現在SearchBar搜索項目,但搜索到的項目不會顯示在tableview中,因爲用搜索結果填充表格的NSMutableArray不保留值。

我已經把代碼和NSLog語句的副本copyListOfItems總是返回0即使NSLog(@「%@」,sTemp);在控制檯中顯示搜索到的項目。

我已經創建了NSMutableArray copyListOfItems的屬性,並將其合成,但其在控制檯中的計數始終顯示爲零。

這裏是代碼:

 searchArray = [Food mutableCopy]; 

for (NSString *sTemp in searchArray) 

    { 
    NSLog(@"Value: %@",NSStringFromClass([sTemp class])); 

       NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch]; 

    if (titleResultsRange.length > 0) 
    { 
     NSLog(@"sTemp is:%@",sTemp); 
     NSLog(@" is:%@",sTemp); 
     [copyListOfItems addObject:sTemp]; 
     [copyListOfItems retain]; 

    } 
     NSLog(@"Copy list count in Search Delegate Method inside For : %d",[copyListOfItems count]); 
} 
NSLog(@"Copy list count in Search Delegate Method : %d",[copyListOfItems count]); 
[searchArray release]; 
searchArray = nil; 
searching = YES; 
[self.table reloadData]; 

德:

alt text

我應該怎麼辦?

請幫助

請推薦

感謝

+0

請發佈代碼本身,而不是代碼的屏幕截圖! – Yuji 2010-11-13 09:31:22

+0

創建'copyOfListItems'中的數組在哪裏? – Chuck 2010-11-15 06:02:29

回答

1

哎呀.. !!!!清理我的項目,並再次建立和運行,它已經開始工作。感謝球員們如此有幫助..:]

1

我只能假設你在釋放數組中的項目。看起來你對保留/釋放概念沒有很好的掌握,因爲你過度保留了NSArray copyListOfItems。您不應該在循環中的同一個對象上調用-retain,因爲您爲循環的每次迭代將單個對象的保留計數遞增1。

那邊,這個代碼在它的NSLog()調用中輸出了什麼?這沒有多大意義。你爲什麼試圖拿一個叫做Food的類的可變副本?

「食物」究竟是什麼?一個客觀的C對象,或一個客觀的C類?在我看來,這不應該被編譯,除非它的命名很糟糕。

2

從你說的,聽起來好像copyListOfItems數組永遠不會被創建。合成屬性會創建一對訪問器方法,但不會自動爲您創建NSMutableArray的實例。

所以某個地方,你需要調用[[NSMutableArray alloc] init](或init...一些變體),並將結果分配給實例變量,或致電[NSMutableArray array](或array...變體),並將結果作爲參數傳遞給setCopyListOfItems:方法。

1

確保您始終將init分配給NSMutableArray。如果你不這樣做,你所添加的所有物品將只是euhm ..消失。所以請確保你在某處執行此操作:

searchArray = [[NSMutableArray alloc] init]; 
+0

這與我以前說過的有什麼不同嗎? – jlehr 2010-11-13 20:03:35

+0

夥計們,我已經做了,但沒有工作 – 2010-11-14 07:15:22

+0

你確定[食品mutableCopy]正是你想要的嗎?還有,什麼是食物對象? – 2010-11-15 14:01:13

0

你在哪裏創建copyListOfItems數組?

我猜copyListOfItems是零。而你正試圖給nil數組添加一些東西,並試圖保留nil。

注意:無論您在nil上做什麼操作都不會受到影響。檢查您是否正確創建copyListOfItems數組。

爲什麼你要在添加每個對象後保留相同的數組?

相關問題