1

每当我这样做时:

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 时它仍然会抱怨。

替代文字

4

3 回答 3

6

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

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

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

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

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

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

于 2010-08-19T06:38:49.137 回答
1

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

尝试:

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

并确保图像实际上被复制到应用程序的资源文件夹中!

于 2010-08-18T22:13:04.063 回答
0

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

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