2011-09-01 2 views
0

나는 어떻게 해야할지 이미 알고 있지만, 작동하지 않습니다. 이 문제를 해결할 아이디어를 찾고 있습니다. Xcode 4.1이 plist 파일을 만드는 방식과 관련이 있다고 생각합니다.plist에서 읽을 수 없습니다

plist 파일에서 문자열을 읽고 NSArray로 덤프하려고합니다. 이것은 내 코드입니다 :

NSString *myFile = [[NSBundle mainBundle] 
           pathForResource:@"File1"ofType:@"plist"]; 

myArray = [[NSArray alloc]initWithContentsOfFile: myFile]; 

최상위 레벨과 몇 개의 문자열에 대한 배열 인 Xcode에서 plist 파일을 만들었습니다. myArray는 항상 null입니다. 나는 엑스 코드 4 최상위 수준에서 사전과 plist를 만듭니다 stackoverflow 다른 곳에서 읽을 때 텍스트 편집기에서 plist 열어보십시오. 최상위 레벨에서 배열을 만들 수 있도록 수동으로 편집했습니다. 성공하지 못했습니다. 마지막으로, 나는 최상위 수준의 dict로 되돌아 갔고 그것을 NSDictionary로 읽으려고했는데 성공하지 못했습니다.

나는 튜토리얼을 본 후 튜토리얼을 보았고 StackOverflow에 대한 비슷한 질문을 여러 번 읽었지만 plist 파일에서 아무것도 읽지 못했습니다. 확실히 번들에 있습니다. Xcode에서 plist를 무수히 재현했습니다. 어떤 제안에도 감사드립니다. 그냥 PLIST로드하려면

<?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>New item</key> 
<array> 
    <string>Ping</string> 
    <string>Pang</string> 
    <string>Pong</string> 
</array> 
</dict> 
</plist> 

답변

0

당신의 루트 객체는 dict이므로 메모리에 NSDictionary으로로드해야합니다.

myDictionary = [[NSDictionary alloc] initWithContentsOfFile: myFile]; 
0

, 당신은 직렬화 먼저

[[NSData alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"File1"]] 

을 NSData

로 PLIST를로드하는 속성 목록 직렬화를 사용해야합니다 :

는 PLIST의 모습입니다 dict (또는 루트 항목이 무엇인지에 따라 배열)을 사용합니다.

NSDictionary *aDict = [NSPropertyListSerialization propertyListWithData: options: format: error:] 

Whe Xcode에서 plist를 볼 때, 최상위 요소는 aDict를 만들 수있는 유형입니다.

더 많은 정보를 원하시면 여기를 참조하십시오 : http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/PropertyLists/SerializePlist/SerializePlist.html

당신이 전체 PLIST 문자열로로드하려는 경우, 당신은 아마,있는 NSString 방법으로 뭔가를 [NSString stringFromData] 뭔가를해야합니다.

+0

그건 과도한 방법입니다. NSDictionay로 초기화 할 수 있습니다. – gcamp