خطأ أثناء إنشاء nsarray من بليست؟
-
05-07-2019 - |
سؤال
واني اسعى الى خلق NSArray من ملف .plist، ولكن أظل الحصول على هذا الخطأ:
و"'NSUnknownKeyException', reason: '[<NSCFString 0x5bbca60> valueForUndefinedKey:]: this class is not key value coding-compliant for the key Value1.'
"
في الملف .plist، لقد مفتاح يسمى "البند 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];
}
}
المحلول
وصالحة لا تملك مفاتيح (أنها لا تحتاج إلى أي لتعالج العناصر من خلال المؤشرات الخاصة بهم)، وتتألف القواميس فقط من أزواج قيمة المفتاح. جرب:
for (id value in originalArray) {
NSLog(@"bundle: value=%@", value);
}
نصائح أخرى
في حلقة for
الخاص بك، كنت تستخدم originalArray
مثل القاموس. إذا جذر بليست الخاص بك هو القاموس، يجب عليك استخدام NSDictionary
، وليس NSArray
لقراءته.
ويمكنك استخدام NSMutableArray فورا بدلا من NSArray وتحويله إلى NSMutableArray وكذلك التأكد من أن PLIST الخاص بك هو نوع صفيف. أن الشفرة تبدو:
-(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];
}
}