2016-01-14 58 views
0

我有一個NSMutableDictionary持有NSArrays。例如:獲取對象的關鍵字NSDictionary

NSArray *food = [NSArray arrayWithObjects:@"pasta", @"bread", nil]; 
[myDictionary setObject:food forKey:@"toEat"]; 
NSArray *drink = [NSArray arrayWithObjects:@"sprite", @"cola", nil]; 
[myDictionary setObject:drink forKey:@"toDrink"]; 

要訪問的所有值,我使用的代碼:

NSArray *allValues = [[myDictionary allValues] valueForKeyPath:@"@unionOfArrays.self"]; 

有什麼辦法去除一個特定的對象?例如,從UITableView中刪除「可樂」,我必須找到這個對象的關鍵。

NSString *key = [myDictionary allKeysForObject:@"cola"]; 
NSMutableArray *allArraysForKey = [myDictionary allObjectsForKey:key]; 
[allArraysForKey removeObject:@"cola"]; 
[myDictionary setObject:allArraysForKey forKey:key]; 

我找不出問題在哪裏? myDictionary allkeysforobject不顯示「可樂」的密鑰

+0

我會嘗試使它成爲一個NSMutableArray開始然後刪除索引處的對象。 – Echizzle

回答

1

對象@"cola"不是您的字典中的關鍵。有一個包含對象@"cola"的數組,但沒有對象本身的實例。因此allKeysForObject:不會返回任何內容。

你可能也想小心[[myDictionary allValues] valueForKeyPath:...]allValues以未定義的順序返回所有值。因此,由於任何不相關的變化,或者甚至由於沒有任何變化,您的調用的淨效果允許在調用之間大幅度變化,並且該行爲不需要在設備或iOS版本之間保持不變。

一個更傳統的方法將是一個簡單的數組持有你的對象,它將命名一個名稱(如'可樂')和類型('食物'或'飲料')。你可以按類型排序來形成你的部分。