Могу ли я прочитать только ключ из plist?

#ios #iphone #ipad #plist #key-value

#iOS #iPhone #iPad #plist #ключ-значение

Вопрос:

Могу ли я прочитать только ключ из plist без его значения, также, если я знаю значение, могу ли я прочитать ключ?

Комментарии:

1. Что, если разные ключи имеют одинаковое значение? Что должно произойти тогда?

2. @WTP: Никакие ключи не имеют одинакового значения, и обращение не произойдет

Ответ №1:

Reading .plist:

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

Получение всех ключей и всех значений:

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

Получение всех ключей для объекта values:

 NSArray* allmyKeys = [myDictionary  allKeysForObject:myValueObject];
  

Комментарии:

1. myDictionary здесь действительно должно быть NSDictionary an, а не NSMutableDictionary .

Ответ №2:

В качестве альтернативы вы можете использовать allKeysForObject: метод, который возвращает,

Новый массив, содержащий ключи, соответствующие всем вхождениям anObject в словаре. Если объект, соответствующий anObject, не найден, возвращает пустой массив.

Из этого массива вы можете получить ключ, вызвав objectAtIndex: метод.

Ответ №3:

Используйте -[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, потому что ключи не упорядочены. Ну что ж.

Комментарии:

1. Я добавил пример. Я не знал об этом методе 🙂

Ответ №4:

Для того, чтобы прочитать значения в установленной папке приложения:

  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];
  

Метод Джалии у меня не сработал, тогда я попробовал этот метод.