Получение ключей в словаре NSMutable для всплывающей кнопки - PullRequest
0 голосов
/ 19 февраля 2012

Я пытаюсь получить список всех плейлистов в iTunes и поместить их во всплывающую кнопку, из которой пользователь может выбрать.

Я создал собственный класс для взаимодействия с iTunes, вытащил плейлисты и поместил их в NSMutableDictionary.

Затем я создал экземпляр класса контроллера iTunes в AppDelegate как «iTunesInterface».

В моем файле .xib я создал контроллер словарей и привязал его к AppDelegate с помощью пути к ключу модели iTunesInterface.userPlaylists

Затем я выбрал всплывающую кнопку и связал содержимое и значения содержимого с упорядоченными объектами контроллера словаря ...

Все компилируется, но я не могу получить ничего, чтобы показать во всплывающей кнопке. Это абсолютно пусто. Не уверен, что я делаю не так. Вот код:

iController.h:

#import <Foundation/Foundation.h>
#import "iTunes.h"

@interface TuneController : NSObject
{
    iTunesApplication *iTunes;
    NSMutableDictionary *userPlaylists;
}

@property (retain, nonatomic) iTunesApplication *iTunes;
@property (copy, nonatomic) NSMutableDictionary *userPlaylists;

- (NSMutableDictionary *) playlists;


@end

iController.m

#import "iController.h"

@implementation TuneController

@synthesize iTunes;
@synthesize userPlaylists;


- (id) init {
    self = [super init];
    if (self)
    {
        // Create iTunes Object
        iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];
        userPlaylists = [self playlists];
    }
    return self;
}

- (NSMutableDictionary *) playlists {  

    NSArray *sources = [iTunes sources];
    iTunesSource *librarySource = nil;

    for (iTunesSource *source in sources) {
        if ([source kind] == iTunesESrcLibrary) {
            librarySource = source;
            break;
        }
    }

    SBElementArray *playlists = [librarySource userPlaylists];
    NSMutableDictionary *playlistNames = nil;
    int i = 0;

    for (SBElementArray *list in playlists) {
        [playlistNames setObject:[playlists objectAtIndex:i] forKey:[[playlists objectAtIndex:i] name]];
        NSLog(@"Playlist Name: %@", [[playlists objectAtIndex:i] name]); // This is how I know I'm getting good values for the dictionary...
        i++; 
    } 

    return playlistNames; 

} 

@end

Соответствующий раздел AppDelegate.h

#import <Cocoa/Cocoa.h>
#import "iController.h"

@interface SCAppDelegate : NSObject <NSApplicationDelegate>
{
    TuneController *iTunesInterface;
}

@property (copy, nonatomic) TuneController *iTunesInterface;
@end

Соответствующий раздел AppDelegate.m

#import "SCAppDelegate.h"
#import "iController.h"


@implementation SCAppDelegate
...
@synthesize iTunesInterface;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    iTunesInterface = [[TuneController alloc] init];
}

Я бьюсь головой об этом и не могу понять, почему мои значения не отображаются во всплывающей кнопке. Какие-либо предложения? Заранее спасибо за помощь!

1 Ответ

1 голос
/ 19 февраля 2012

TuneController::playlists, реализованный в iController.m, в настоящий момент всегда будет возвращать ноль, так как playlistNames никогда не инициализируется.

...