从plist中包含的字典加载数据的常用方法如下:
NSString *path = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"];
NSDictionary *data= [NSDictionary dictionaryWithContentsOfFile:path];
有没有办法只导入一个键/一组键中指定的元素,如:
NSDictionary *data= [NSDictionary dictionaryWithContentsOfFile:path forKey:key];
这个想法是按密钥执行字典内容的延迟加载。
答案 0 :(得分:0)
请尝试以下方法。
- (void)viewDidLoad
{
NSMutableArray *arry;
arry = [[NSMutableArray alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Catalog" ofType:@"plist"];
NSDictionary *dic = [menuArray objectAtIndex:indexPath.row];
lblName.text = [dic objectForKey:@"MenuName"];
}
答案 1 :(得分:0)
因此,根据我上面的评论,您可以通过类别向NSDictionary添加类方法。你可以做类似的事情(没有测试BTW)。
+ (NSDictionary *)dictionaryWithContentsOfFile:(NSString *)path forKeys:(NSArray *)keys
{
NSMutableDictionary *newDictionary = nil;
NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:path];
if (dictionary) {
newDictionary = [NSMutableDictionary dictionary];
for (id key in dictionary.allKeys) {
if ([keys containsObject:key]) {
newDictionary[key] = dictionary[key];
}
}
}
return [newDictionary copy];
}
如果你这样做了,你会看到内存中的尖峰,但是一旦字典被释放它就会消退。
或者,看看YAJL(https://github.com/lloyd/yajl)。我在处理非常大的JSON文件时使用了这个。这主要是它的块流。它是事件驱动的,因此您应该能够将其流入并检测您想要的密钥(希望如此)。