我正在從我們的Web服務器拉出座標列表。我將整個列表存儲爲一個NSDictionary。在我使用數據(lat,long,radius,name)時,我想用1或2個字段更新數據列表。有沒有辦法將這兩個項目插入到現有的字典?我可以插入一個對象到NSDictionary中嗎?
我唯一的想法是,我將不得不將數據加載到一個NSMutableDictionary中,以允許添加,並創建新的字典並用新的更新數據覆蓋現有的字典。希望得到更簡單或更清潔的方式,而不是貧民窟操縱它。提前致謝。
我正在從我們的Web服務器拉出座標列表。我將整個列表存儲爲一個NSDictionary。在我使用數據(lat,long,radius,name)時,我想用1或2個字段更新數據列表。有沒有辦法將這兩個項目插入到現有的字典?我可以插入一個對象到NSDictionary中嗎?
我唯一的想法是,我將不得不將數據加載到一個NSMutableDictionary中,以允許添加,並創建新的字典並用新的更新數據覆蓋現有的字典。希望得到更簡單或更清潔的方式,而不是貧民窟操縱它。提前致謝。
你的想法是正確的,你必須創建一個NSMutableDictionary,因爲NSDictionary不能被修改。
NSMutableDictionary *newDoc = [[NSMutableDictionary alloc] initWithDictionary:doc];
如果在NSDictionary中有任何不可變的數組或字典,則可能需要深度拷貝進行修改。
NSMutableDictionary *newDoc = (NSMutableDictionary *)CFPropertyListCreateDeepCopy(kCFAllocatorDefault, doc, kCFPropertyListMutableContainers);
感謝您的信息。我將不得不深入研究我需要做的事情。我需要能夠添加項目而不破壞其中的現有數據。 –
沒有數據會被破壞或丟失。您可以使用setValue或setObject添加新條目。如果您只是想添加條目,您也不需要深層副本。 – Patrick
從docs:
的NSDictionary的類聲明的編程接口到管理鍵和值的不可變協會對象 。
因此,NSDictionary
是不可變的 - 您可能不會添加到它。使用NSMutableDictionary
並不是不乾淨或「貧民區索具」......這是NSMutableDictionary
的全部目的。
感謝您的負面評價。我的問題並不意味着使用NSMutableDictionary是「貧民區索具」,只是尋找更好的解決方案,如果有的話。 –
我很困惑...我沒有降低你的問題。你碰巧低估了我的回答? ;) – GarlicFries
對不起,我感到困惑。別擔心。 –
我不認爲使用'NSMutableDictionary'將是*貧民窟索具*您的解決方案。這是可變字典的用途。事實上,這似乎比每次分配新字典來處理新數據集都要乾淨得多。 –
我目前只是存儲所有的數據作爲NSDictionary,因爲我沒有添加任何東西,所以它工作正常。所以沒有多個字典或大量的分配。主要尋找可驗證的字典是我需要採取的路徑,並沒有更好的我可以/應該使用。謝謝。 –