2011-02-14 5 views
2

몇 가지 도움이 필요합니다. 테이블 뷰에 XML 파일을로드하고 싶습니다. 이것은 내가 지금까지 가지고있는 것입니다. 나는 그것이 내가 약간 알고있는 바인딩을 포함 할 것이라고 생각한다.Objective-C NSDictionary의 인스턴스로 테이블 뷰 채우기

NSString* libraryPath = @"~/Music/iTunes/iTunes Music Library.xml"; 
NSDictionary* musicLibrary = [ NSDictionary dictionaryWithContentsOfFile: libraryPath ]; 

감사합니다.

답변

1

NSXMLDocument을 사용하여 XML 파일을 구문 분석 할 수 있습니다. NSXMLParser.을 구현하는 것보다 약간 쉬울 수도 있습니다. 예가 아직 없습니다. 이 데이터를 일단

- (void) parseItunesLibrary { 
    NSError* error = nil; 
    NSString* libraryPath = nil; 

    // better way to get the iTunes database file (in case library was moved) 
    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 
    NSDictionary* iAppsDict = [defaults persistentDomainForName:@"com.apple.iApps"]; 
    NSArray* itunesDBPath = [iAppsDict objectForKey:@"iTunesRecentDatabasePaths"]; 
    if([itunesDBPath count] > 0) { 
     libraryPath = [[itunesDBPath objectAtIndex: 0] stringByExpandingTildeInPath]; 
    } 

    NSData* libraryData = [NSData dataWithContentsOfFile:libraryPath]; 
    NSXMLDocument* libraryDoc = [[NSXMLDocument alloc] initWithData:libraryData options:NSXMLDocumentTidyXML error:&error]; 
    // handle error before continuing here 
    if (error) { 
     NSLog(@"%@", [error localizedDescription]); 
     [libraryDoc release]; 
     return; 
    } 

    NSXMLElement* root = [libraryDoc rootElement]; 
    [libraryDoc release]; 

    // assuming you wanted an array of the songs you can get them like this 
    NSArray* songsArray = [root nodesForXPath:@".//dict/dict/dict" error:nil]; 

    // to access the different song elements you can do something like this 
    for(NSXMLElement* song in songsArray) { 
     NSString* songArtist = [[[song nodesForXPath:@"./Artist" error:nil] lastObject] stringValue]; 
    } 
} 

, 당신은 그것은 NSTableView 당신이 원하는 방식을 넣을 수 있습니다. NSTableView Programming Guide에서 테이블 데이터 소스를 사용하십시오.

+0

궁금한 점이 있다면 테스트 해 보셨습니까? –

+0

흠 나는 기억이 안 나는데, 비슷한 것을 구현했다. 잠재적 인 구문 오류 이외에는 여전히 유효해야합니다. – David