Objective-C Заполнение табличного представления экземпляром NSDictionary - PullRequest
2 голосов
/ 14 февраля 2011

Мне нужна помощь. Я хочу загрузить XML-файл в табличное представление. Это то, что у меня есть, может кто-нибудь объяснить мне, как это сделать. Я думаю, что это будет связано и с привязками, о которых я немного знаю.

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

Спасибо, Сами.

1 Ответ

1 голос
/ 14 февраля 2011

Вы можете использовать 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 Руководство по программированию .

...