0

我似乎无法在我的 System Preferences 项目中解决我的 NSImages 问题?

该图像是一个 user.png,位于我的 xcode 项目的主文件夹中。

编辑:我已经包含了Source Code的链接。希望有人能够发现问题。

个人控制器.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

4 回答 4

2

您可以通过以下方式访问项目文件夹中的图像文件:

NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"smiley" ofType:@"png"];
NSImage *image = [[NSImage alloc] initWithContentsOfFile: imagePath];
NSImageCell *cell = [[NSImageCell alloc] init];
[cell setImage:image];
于 2012-02-10T09:03:59.003 回答
2

请务必使用正确的图像名称。如果图像是“Smiley.png”,则使用“Smiley.png”。您也应该使用带有方法的扩展名imageNamed。尝试:

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

并仔细检查文件是否真的都是小写字母。

于 2012-02-10T20:34:37.053 回答
1

smiley.png文件是否显示在 Xcode 项目导航器中?如果不是,它将不会被添加到构建的应用程序中。将其从 Finder 拖到导航器中,然后取消选择“将项目复制到目的地...”。拖

如果它在导航器中,请检查目标成员。单击导航器中的文件并打开实用程序窗格。确保在第一个选项卡上为您的应用程序选中复选框。目标会员

于 2012-02-10T20:40:06.967 回答
0

虽然我没有检查您的代码,但我想建议您执行以下步骤:

第 1 步:在 XIB 中,将 NSImageCell 拖放到 listGender 表列上。

第 2 步:- tableView:objectValueForTableColumn:row:

返回 nil,当 tableColumn == listGender

第 3 步:实现此方法:

– tableView:willDisplayCell:forTableColumn:row:

并在单元格上设置图像,当 tableColumn == listGender

希望这可以帮助 :)

于 2012-02-14T15:47:51.563 回答