我有两个plist
文件,我使用作为数据源在我的应用程序中创建NSArray
和NSDictionaries
。
我希望CSV文件的输出看起来像:
exerciseName, muscleGroup, description
Barbell Curl, Biceps, This is a bicep exercise
问题是,我需要首先组合两个nsdictionary。一个有exerciseName和muscleName,而另一个有exerciseDescription。但是我需要有一个字典数组,每个练习对象都有三个键。
我使用以下代码来构建主NSMutableArray
if (muscleArray == nil)
{
NSString *path = [[NSBundle mainBundle]pathForResource:@"data" ofType:@"plist"];
NSMutableArray *rootLevel = [[NSMutableArray alloc]initWithContentsOfFile:path];
self.muscleArray = rootLevel;
}
NSMutableArray *arrayForSearching = [NSMutableArray array];
for (NSDictionary *muscleDict in self.muscleArray)
for (NSDictionary *excerciseDict in [muscleDict objectForKey:@"exercises"])
[arrayForSearching addObject:[NSDictionary dictionaryWithObjectsAndKeys:
[excerciseDict objectForKey:@"exerciseName"], @"exerciseName",
[muscleDict objectForKey:@"muscleName"], @"muscleName", nil]];
self.exerciseArray = arrayForSearching;
我使用下面的代码来构建NSDictionary,它具有exerciseDescription键
NSString *exerciseNameString =self.exerciseName;
NSString *path = [[NSBundle mainBundle] pathForResource:@"ExerciseDescriptions" ofType:@"plist"];
NSDictionary *exerciseDescription = [NSDictionary dictionaryWithContentsOfFile:path];
NSString *description = [exerciseDescription objectForKey:exerciseNameString];
您显然知道如何遍历和创建字典,那么问题在哪里呢?
遍历exerciseArray
,并向它的每个字典添加一个练习描述。然而,这似乎非常低效,您可能应该重新考虑整个事情。为什么不将它们以现成的格式存储在磁盘上呢?
数组用于重要项的顺序。这似乎并不重要,为什么不把它们保留为nsdictionary呢?如果需要访问字典中的所有键,只需调用allKeys
NSString *path = [[NSBundle mainBundle] pathForResource:@"ExerciseDescriptions"
ofType:@"plist"];
NSDictionary *descriptions = [NSDictionary dictionaryWithContentsOfFile:path];
NSMutableArray *exercises = self.exerciseArray;
for (NSInteger i = 0; i < [exercises count]; i++) {
NSMutableDictionary *dict = [[exercises objectAtIndex:i] mutableCopy];
NSString *name = [dict valueForKey:@"exerciseName"];
NSString *desc = [descriptions valueForKey:name];
if (desc) {
[dict setValue:desc forKey:@"exerciseDescription"];
[exercises replaceObjectAtIndex:i withObject:dict];
}
[dict release];
}
我创建了以下项目来解决合并从plists创建的两个字典的需要:https://github.com/bumboarder6/NSDictionary-merge
即使你的两个字典或数组之间有一些重复的条目,它也会工作,它也会递归合并,所以你会得到整个pllist的合并,即使它包含字典的字典或字典的数组(等等)