#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];
Метод Джалии у меня не сработал, тогда я попробовал этот метод.