2011-08-11 60 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