Системные настройки NSImage не разрешаются - PullRequest
0 голосов
/ 10 февраля 2012

Мне не удается разрешить разрешение NSImages в моем проекте «Системные настройки»?

Изображение - это файл user.png, который находится в моей главной папке проекта xcode.

РЕДАКТИРОВАТЬ: я включил ссылку на Исходный код .Надеюсь, кто-то сможет определить проблему.

PersonController.m

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    Person *person = [personsList objectAtIndex:row];

    if (tableColumn == listGender) {
        if ([person.gender isEqualToString: @"m"]) {
            /****************************
             *  Method - 1: Doesn't work
             ****************************/
            NSImage *image = [NSImage imageNamed:@"user.png"];
            NSLog(@"image is valid? %@", [image isValid] ? @"yes" : @"no");
            return image;


//            return @"male";
        }
        else {
            /****************************
             *  Method - 1: Doesn't work
             ****************************/
            NSImage *image = [NSImage imageNamed:@"user_female.png"];
            NSLog(@"image is valid? %@", [image isValid] ? @"yes" : @"no");

            return image;
//            return @"female";
        }
    }
    else if (tableColumn == listName) {
        return [person valueForKey:@"name"];
    }
    else {
        return nil;
    }
}

Кроме того, указание этого пути работает, но почему я должен указать весь путь?

NSImage *myImage = [[NSImage alloc] initByReferencingFile:@"/Users/coderama/sandbox/Persons/user.png"];

Ответы [ 4 ]

2 голосов
/ 11 февраля 2012

Обязательно используйте правильное название изображения. Если изображение «Smiley.png», используйте «Smiley.png». Также вы должны использовать расширение с методом imageNamed. Попробуйте:

NSImage *image = [NSImage imageNamed:@"smiley.png"];

и двойная проверка, если файл действительно состоит из маленьких букв.

2 голосов
/ 10 февраля 2012

Вы можете получить доступ к файлу изображения в папке вашего проекта следующим образом:

NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"smiley" ofType:@"png"];
NSImage *image = [[NSImage alloc] initWithContentsOfFile: imagePath];
NSImageCell *cell = [[NSImageCell alloc] init];
[cell setImage:image];
1 голос
/ 11 февраля 2012

Отображается ли файл smiley.png в навигаторе проекта Xcode?Если это не так, он не будет добавлен во встроенное приложение.Перетащите его в навигатор из Finder и отмените выбор «Копировать объекты в места назначения ...».Drag

Если это в Навигаторе, проверьте Целевое Членство.Нажмите на файл в навигаторе и откройте панель утилит.Убедитесь, что флажок для вашего приложения установлен на первой вкладке.Target Membership

0 голосов
/ 14 февраля 2012

Хотя я не проверял ваш код, я хотел бы предложить вам следующие шаги:

Шаг 1: В XIB перетащите NSImageCell в столбец таблицы listGender.

Шаг 2: В - tableView:objectValueForTableColumn:row:

вернуть nil, когда tableColumn == listGender

Шаг 3: Реализация этого метода:

– tableView:willDisplayCell:forTableColumn:row:

и установите изображение в ячейке, когда tableColumn == listGender

Надеюсь, это поможет:)

...