2011-08-11 89 views
0

這似乎很簡單,但我似乎無法找到在任何地方做到這一點的方式。基本上,我建立使用詞典的數組如下:使用字典讀取和寫入NSMutableArray

NSArray *times = [NSArray arrayWithObjects:@"3pm",@"4pm",@"5pm",nil]; 
NSDictionary *timesDict = [NSDictionary dictionaryWithObject:times forKey:@"Times"]; 

NSArray *locations = [NSArray arrayWithObjects:@"Miami", @"New York", @"Las Vegas", nil]; 
NSDictionary *locationsDict = [NSDictionary dictionaryWithObject:locations forKey:@"Locations"]; 

[listOfItems addObject:timesDict]; 
[listOfItems addObject:locationsDict]; 

,並想添加動態多次,並且根據用戶的輸入位置。

鑑於我有新的變量,其中包含一個新的「時間」和一個新的「位置」(都是NSString),我如何根據Times/Locations鍵添加它們?

理想我想做到以下幾點:

[listOfItems addObject:newLocation forkey:@"Locations"]; 
[listOfItems addObject:newTime forkey:@"Times"]; 

(其犯規編譯當然....)

而且還從位置或時段看,這樣的:

NSString * str =從listOfItems讀取,forkey:「Times」,atIndex:bla(以自由格式:))

感謝任何幫助。謝謝!

回答

4

爲什麼你使用兩個單獨的字典? 嘗試使用一個包含兩個數組:在指數

[dataDict objectForKey:@"Times"] 

或特定時間:

NSMutableArray *times = [NSMutableArray arrayWithObjects:@"3pm",@"4pm",@"5pm",nil]; 
NSMutableArray *locations = [NSMutableArray arrayWithObjects:@"Miami", @"New York", @"Las Vegas", nil]; 
NSDictionary *dataDict=[[NSDictionary alloc] initWithObjectsAndKeys:times,@"Times",locations,@"Locations",nil]; 

這樣,你可以用訪問數組

[[dataDict objectForKey:@"Times"] objectAtIndex:0]; 

或增值時報array:

[[dataDict objectForKey:@"Times"] addObject:@"Today"]; 
+0

那真棒 - 謝謝! – TommyG

+0

順便說一句,這個選項似乎在運行時崩潰... [[dataDict objectForKey:@「Times」] addObject:@「Today」]; – TommyG

+0

調試器說什麼?檢查時間數組是否可變... – kviksilver

2

如何:

[[listOfItems locationsDict] addObject:newLocation]; 

[[listOfItems timesDict] addObject:newTime]; 
+0

+1 Tha NKS。這可以工作,但將需要使locationsDict和timesDict成爲全球。有沒有一種方法來讀/寫基於密鑰?另外,你會如何閱讀這件事?說,索引3中的位置? – TommyG

+0

你可以這樣做:[[myDictionary objectAtIndex:] valueForKey:]來讀取數據。 –

2

您需要創建的NSMutableArray /的NSMutableDictionary的實例。之後,您可以使用Dylan Reich建議的方法。

2

這將是一個很好的時間來使用一個類來表示你的時間和地點。對於項目中的新程序員來說,管理起來會更容易,而且更容易理解。

@interface TimesAndLocations : NSObject 
{ 
    //Initialize these in init and release in dealloc 
    NSMutableArray *_times; 
    NSMutableArray *_locations; 
} 

//Use these methods to add times and locations 
-(void)addTime:(NSString*)time; 
-(void)addLocation:(NSString*)location; 

//Could add remove methods here as well 

@end