我可以从plist中读取钥匙吗?

时间:2011-06-04 11:32:26

标签: ios iphone ipad plist key-value

我是否可以从plist中读取没有其值的密钥,如果我知道该值可以读取密钥吗?

4 个答案:

答案 0 :(得分:11)

阅读.plist:

NSString *path = [[NSBundle mainBundle] pathForResource:@"myPlist" ofType:@"plist"];    
NSMutableDictionary *myDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:path];

获取所有密钥和所有值:

NSArray* allmyKeys = [myDictionary  allKeys];
NSArray* allmyValues= [myDictionary  allValues];

获取值对象的所有键:

NSArray* allmyKeys = [myDictionary  allKeysForObject:myValueObject];

答案 1 :(得分:3)

作为替代方案,您可以使用返回的allKeysForObject:方法

  

一个新数组,包含与字典中所有出现的anObject相对应的键。如果找不到与anObject匹配的对象,则返回一个空数组。

从该数组中,您可以通过调用objectAtIndex:方法获取

答案 2 :(得分:1)

使用-[NSDictionary allKeysForObject:] *。


实施例

NSArray *keys = [myDict allKeysForObject:@"My Value"];
if ([keys count] != 0) { // to prevent out-of-bounds crashes
  NSString *key = [keys objectAtIndex:0];
  return key;
} else {
  return nil;
}

*不知道为什么它返回NSArray对象而不是NSSet对象,因为键没有被排序。哦,好吧。

答案 3 :(得分:1)

要读取应用已安装文件夹中的值:

 NSString *PListName=@"ExamplePlist";
 NSString *_PlistNameWithExtension=[NSString stringWithFormat:@"%@.plist",PlistName];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //1
NSString *documentsDirectory = [paths objectAtIndex:0]; //2
NSString *path = [documentsDirectory stringByAppendingPathComponent:_PlistNameWithExtension]; //3

NSDictionary *myDictionary = [[NSDictionary alloc] initWithContentsOfFile:path];
NSLog(@"%@",[myDictionary description]); 
NSArray *AllKeys=[myDictionary allKeys];

Jhaliya的方法对我没用,然后我尝试了这种方法。