2009-07-30 1 views
1

은 내가 .plist 파일에서 NSArray를 만들려고하고 있어요,하지만 난이 오류가 계속 :plist에서 nsarray를 만드는 동안 오류가 발생 했습니까?

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

, 나는 키가 "항목 1"이라고 한 .plist 파일에서

과 "Value1"이라는 문자열 값 그런 다음 코드에서 나는있는 NSArray 해당 파일에서 생성되는이 : 당신의 for 루프에서

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

} 

    } 
+0

진실로, 나는 당신이 무엇을하려하는지 말할 수 없습니다. 좀 더 정확한 언어를 알려주세요. – Amagrammer

+0

예! 나는 배열 인 속성 목록을 가지고있다. 이것은 기본적으로 게임의 높은 점수와 같습니다. 누군가 게임을 할 때, 새로운 점수를 NSMutableArray에 추가합니다. 그런 다음이 새로운 배열을 가져 와서 내 속성 목록의 최고 점수와 결합하고 전체 컬렉션을 원래 plist 파일에 다시 작성합니다. 하지만 오류가 발생하고 이유를 모르겠습니다. 말이 돼? – Evelyn

+0

거기에 내 오래된 변수 중 하나를 남겨 놓은 것을 잊었습니다. 앱이 무엇을하는지 모르는 경우 이해가되지 않습니다. :) 죄송합니다. 고쳤다. – Evelyn

답변

2

배열에는 키가 없습니다 (요소가 색인에 의해 주소 지정되므로 아무 것도 필요하지 않습니다). 사전은 키 - 값 쌍으로 구성됩니다. 시도 :

for (id value in originalArray) { 
      NSLog(@"bundle: value=%@", value); 
    } 
+0

예! 그것은 효과가 있었다. – Evelyn

0

, 당신은 사전처럼 originalArray을 사용하고 있습니다. plist의 루트가 사전 인 경우 이 아닌 NSDictionary을 사용해야합니다.

+0

루트는 NSArray입니다. NSArray로 어떻게 읽습니까? 값을 추가해야하며 NSDictionary를 사용하여 값을 추가 할 수 없습니다. – Evelyn

+0

정확하게 루트가 "Array"이면 NSArray 또는 NSMutableArray를 사용할 수 있습니다. –

0

대신 NSArray를 즉시있는 NSMutableArray를 사용하고있는 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]; 
} 
}