سؤال

واني اسعى الى خلق 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];
}
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top