系统首选项NSImage无法解析

时间:2012-02-10 08:56:24

标签: objective-c cocoa nsimage system-preferences

我似乎无法在我的系统偏好设置项目中解决我的NSImages问题?

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

编辑:我已添加了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"];

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

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

并重复检查文件是否全部都是小写字母。

答案 2 :(得分:1)

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

如果它在导航器中,请检查目标成员资格。单击导航器中的文件,然后打开“实用程序”窗格。确保在第一个选项卡上选中了应用程序的复选框。 Target Membership

答案 3 :(得分:0)

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

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

第2步:- tableView:objectValueForTableColumn:row:

当tableColumn == listGender

时返回nil

第3步:实施此方法:

– tableView:willDisplayCell:forTableColumn:row:

当tableColumn == listGender

时,

并在单元格上设置图像

希望这会有所帮助:)