无法创建NSImage?

时间:2010-08-18 22:08:45

标签: objective-c cocoa nstableview nsimage

每当我这样做时:

xxx = [NSImage imageNamed:@"Package.png"];

xxx 加载,但它的宽度和高度保持为0.每当我尝试将其加载到NSImageCell时,我都会收到此错误:

  

NSImageCell的对象值必须是NSImage。

有人可以帮帮我吗?我以前从未遇到过这个问题。

编辑:抱歉,我错过了这一点。因此,当我在数据源委托中执行此操作时,它不起作用,并在'返回单元格后显示上述错误; ”。

NSImageCell* cell = [[NSImageCell alloc] init];
[cell setObjectValue:xxx]; // Using imageNamed doesn't help either

编辑2:这变得更加恶化。我不明白发生了什么但是图像正确地加载了高度和宽度,但是当我将它添加到NSImageCell时它仍然会抱怨。

alt text

3 个答案:

答案 0 :(得分:6)

我明白了 - 所以表格视图方面毕竟是相关的。

作为数据源,您的工作是返回(并在用户编辑的情况下接收列中单元格的对象值)。

但你没有回报这样的价值;你回来了一个牢房。因此,您尝试将图像单元格(由数据源创建)设置为图像单元格的值(该列所拥有的现有单元格)。

日志消息表明您在创建列时已将列的单元格设置为图像单元格,因此您现在需要做的就是更改数据源以始终返回列的对象值,而不是单元格。对于图像列,返回图像。对于文本列,返回字符串。

请注意,NSTableView不像UITableView那样工作,其中UITableViewCells是UIViews,并且屏幕上的行数与单元格一样多;在NSTableView中,每个NSTableColumn获取一个且只有一个数据单元,并且一个单元用于绘制每一行的该列。单元格绘制其提供给单元格的对象值,您可以通过从数据源方法返回它(对象值)来执行此操作。

有关控件的文档(NSTableView是一种NSControl)及其单元格是Control and Cell Programming Guide

答案 1 :(得分:1)

我的猜测是它正在返回nil,在这种情况下,获取宽度/高度将返回0.

尝试:

xxx = [NSImage imageNamed:@"Package"]; // the extension is not needed on the desktop or iOS 4

并确保将图像实际复制到应用程序的Resources文件夹中!

答案 2 :(得分:0)

事实上,确定你正在接收宽度和高度为零的NSImage实例(不是nil),下一步是确定发生这种情况的原因。

  1. 你可以在预览中打开Package.png吗?
    1. 如果是这样:预览信息窗口中的宽度和高度是多少?它有任何分辨率(DPI或每米像素数)信息吗?如果是这样,那说什么呢?
    2. 如果您打开应用程序包,可以在预览中打开Package.png的副本吗?
  2. 当您记录图像的描述时,输出是什么?
  3. 记录图像representations数组的输出是什么? (这应该包含在图像自己的描述中,但我明确地将它包含在内。)
  4. 如果删除构建文件夹并重新构建会发生什么?