2012-02-10 2 views
0

Я не могу заставить свои NSImages разрешить в моем проекте «Системные настройки»?Системные настройки NSImage не разрешает

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

EDIT: Я включил ссылку на Source Code. Надеюсь, кто-то сможет определить проблему.

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"]; 
+0

Лучше использовать 'mainBundle', как в моем ответе ниже, если вы хотите, чтобы ваше приложение работало с другими маками –

+0

Я благодарю всех за их предложения, но, к сожалению, никто из них не работал. Пожалуйста, ознакомьтесь с обновлением исходного кода ... надеюсь, кто-то сможет определить проблему. Также +1 для всех, кто помог – Coderama

ответ

2

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

NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"smiley" ofType:@"png"]; 
NSImage *image = [[NSImage alloc] initWithContentsOfFile: imagePath]; 
NSImageCell *cell = [[NSImageCell alloc] init]; 
[cell setImage:image]; 
+0

Я пробовал это, и я все равно получаю тот же результат. – Coderama

+0

Используйте метод 'setImage' вместо' setObjectValue'. Посмотрите ответ, я обновил его –

2

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

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

и doublecheck, если файл действительно все маленькими буквами.

1

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

Если он находится в Навигаторе, проверьте целевое членство. Щелкните файл в навигаторе и откройте панель «Утилиты». Убедитесь, что флажок установлен для вашего приложения на первой вкладке. Target Membership

0

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

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

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

возврата ноль, когда TableColumn == listGender

Шаг 3: реализует этот метод:

– tableView:willDisplayCell:forTableColumn:row:

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

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

+0

Я просто попробовал это, и он не работает.Пойдите с прикрепленным архивом zip в моем первоначально столбе ... – Coderama

 Смежные вопросы

  • Нет связанных вопросов^_^