2013-01-23 2 views
0

아래의 plist에서 8 개 항목을 가져올 수 없습니다. 나는 plist "settings.plist"을 가지고 있습니다. 이제 나는 vragen -> 카테고리 (self.catagorie - 1) -> 질문에서 빠져 나옵니다. 8 가지 항목. 그러나 배열은 비어있게됩니다.plist에서 다중 배열 읽기

내가 뭘 잘못하고 있니?

코드 :

PLIST 파일
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"instellingen.plist"]; 
NSMutableDictionary *instellingen = [NSMutableDictionary dictionaryWithContentsOfFile:path]; 

NSArray *vragen = [instellingen objectForKey:@"vragen"]; 

NSArray *cata = [vragen objectAtIndex: (self.catagorie-1)]; 
NSArray *question = [cata objectAtIndex: 0]; 
NSLog(@"count: %i", [question count]); 

: 당신이 questionData 항목의 배열을 포함 "categoryData"항목의 배열을 가지고있는 것처럼

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>vragen</key> 
    <array> 
     <array> <--catagorydata 
      <array> <-- questiondata 
       <string>vraag</string> 
       <string>A</string> 
       <string>B</string> 
       <string>C</string> 
       <string>D</string> 
       <string>1</string> 
       <string>standaard</string> 
       <string></string> 
      </array> 
      <array> 
       <string>vraag2</string> 
       <string>A</string> 
       <string>B</string> 
       <string>C</string> 
       <string>D</string> 
       <string>1</string> 
       <string>afbeelding</string> 
       <string>afbeelding.jpg</string> 
      </array> 
     </array> 
    </array> 
    <key>firstBoot</key> 
    <true/> 
    <key>regelAtRuntime</key> 
    <true/> 
</dict> 
</plist> 
+0

nil (instellingen == nil)을 얻는 변경 가능한 사전이 있습니까? – Alex

+0

내가 루트를 세면 결과로 2를 얻습니다. 내가 더 깊게 가고 싶을 때 나는 결과로서 0을 얻는다. –

+1

'[vragen objectAtIndex : self.catagorie - 1]'과'[cata objectAtIndex : 0]'을 바꿔서는 안됩니까? (물론 필요한 수정과 함께 ...) –

답변

2

먼저

NSString *path = [documentsDirectory stringByAppendingPathComponent:@"settings.plist"]; 

나는 또한 사전에서 다음을 삭제했다이어야한다 귀하의 코드 또는 사전에 아무런 문제가 없습니다.
이러한 변경을 한 후 난 당신의 코드를 테스트하고 내가 가진 출력이었다 다음 .plist 파일

에 따라 올바른

tester[69637:c07] size of dict 3 
tester[69637:c07] count: 8 

그래서 문제가 처음 4 개 라인이다. 확인 파일은 (I 시뮬레이터를 사용했기 때문에) 내가 프로젝트 폴더에 파일을 복사

NSLog(@"Path : %@",path); 

문서 디렉토리 (잘못가는 뭐죠 보려면 다음 코드 같은 것을 사용)에 다음과 같은 코드와 모든 것을 사용 괜찮 았어

NSBundle* b=[NSBundle mainBundle]; 
NSURL* path1=[b URLForResource:@"settings" withExtension:@"plist"]; 
NSMutableDictionary *instellingen = [NSMutableDictionary dictionaryWithContentsOfURL:path1]; 

NSLog(@"size of dict %d",[instellingen count]); 

NSArray *vragen = [instellingen objectForKey:@"vragen"]; 

NSArray *cata = [vragen objectAtIndex: 0]; 
NSArray *question = [cata objectAtIndex: 0]; 
NSLog(@"count: %i", [question count]); 
+0

감사합니다. 주된 문제는 문서 폴더의 plist가 오래되었습니다. 앱을 제거하고 다시 설치해야했습니다. –

0

그냥 빨리 읽기,하지만 보이는; questionData 항목은 문자열입니다.

NSArray *vragen = [instellingen objectForKey:@"vragen"]; // count = 1 
NSArray *cata = [vragen objectAtIndex: (self.catagorie-1)]; // count = 2 
NSString *question = [cata objectAtIndex: 0]; 

일부 중단 점을 추가하고 데이터를 확인하는 것이 좋습니다. OR, NSLog (@ "data = % @", cata); 위의 두 가지 외에

<--catagorydata 
<-- questiondata 

: 등

이 모든 라인

NSString *path = [documentsDirectory stringByAppendingPathComponent:@"instellingen.plist"]; ?