Ошибка при создании nsarray из plist? - PullRequest
1 голос
/ 30 июля 2009

Я пытаюсь создать NSArray из файла .plist, но получаю эту ошибку:

"'NSUnknownKeyException', reason: '[<NSCFString 0x5bbca60> valueForUndefinedKey:]: this class is not key value coding-compliant for the key Value1.'"

В файле .plist у меня есть ключ с именем «Item 1» и строковое значение с именем «Value1». Затем в коде я создаю NSArray из этого файла:

-(void)recordValues:(id)sender {

    // read "propertyList.plist" values
    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"propertyList" ofType:@"plist"];
    originalArray = [[NSArray alloc] initWithContentsOfFile:plistPath];

   // dump the contents of the array to the log
    for (id key in originalArray) {
        NSLog(@"bundle: key=%@, value=%@", key, [originalArray valueForKey:key]);
    }

    //create an NSMutableArray containing the
    //user's score and the values from originalArray
    NSMutableArray *newArray = [NSMutableArray arrayWithObjects:[NSNumber numberWithFloat:userScore], nil];
    [newArray addObjectsFromArray:array];

    //write xml representation of mutableArray back to propertyList
    [newArray writeToFile:plistPath atomically:NO];

}

    }

Ответы [ 3 ]

2 голосов
/ 30 июля 2009

Массивы не имеют ключей (они не нужны, потому что их элементы адресованы их индексами), только словари состоят из пар ключ-значение. Попробуйте:

for (id value in originalArray) {
            NSLog(@"bundle: value=%@", value);
    }
0 голосов
/ 07 марта 2015

Вы можете немедленно использовать NSMutableArray вместо NSArray и преобразовать в NSMutableArray, а также быть уверенным, что ваш pList имеет тип Array. Ваш код будет выглядеть:

-(void)recordValues:(id)sender {
// read "propertyList.plist" values
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"propertyList" ofType:@"plist"];
//create an NSMutableArray containing the
//user's score and the values from originalArray
NSMutableArray *array = [NSArray arrayWithContentsOfFile: path];
[newArray addObjectsFromArray:array];
//check-out the content
NSLog(@"The content of the array: %@", array);
//write xml representation of mutableArray back to propertyList
[array writeToFile:plistPath atomically:NO];
}
}
0 голосов
/ 30 июля 2009

В вашем цикле for вы используете originalArray как словарь. Если корнем вашего списка является словарь, вы должны использовать NSDictionary, а не NSArray, чтобы прочитать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...