在 NSTableView 中显示图像

Posted

技术标签:

【中文标题】在 NSTableView 中显示图像【英文标题】:Display image in NSTableView 【发布时间】:2011-09-19 09:23:12 【问题描述】:

我正在创建一个表格视图并使用NSDictionaryController。 我的数据来自case.dict 文件 我正在使用此代码:

@interface MyClass : NSWindowController

    IBOutlet NSTableView *tableView;
    IBOutlet NSDictionaryController *dictController;
    IBOutlet NSArrayController *peopleList;
    NSDictionary *currentPerson;


@property (retain) NSDictionary *currentPerson;

MyClass.m 文件

- (void)windowDidLoad

    [super windowDidLoad];

    NSBundle *bundle = [NSBundle mainBundle];
    NSString *path = [bundle pathForResource: @"case" ofType: @"dict"];
    NSArray *listFromFile = [NSArray arrayWithContentsOfFile: path];

    [tableView setSortDescriptors:[NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:@"icon" ascending:YES] autorelease]]];

    [peopleList addObserver:self forKeyPath:@"selectionIndexes" options:NSKeyValueObservingOptionNew context:nil];

 if (listFromFile != nil)

    [peopleList addObjects:listFromFile];

[peopleList setSelectionIndex:0];

[dictController bind:NSContentDictionaryBinding toObject:self withKeyPath:@"currentPerson" options:nil];


它工作正常,表格为我提供了存储在case.dict 文件index 0(ZERO) 中的图像名称。 现在谁能解释一下我如何在表格中获得所有图像而不是他们的名字? 我是可可开发的新手。 任何帮助将不胜感激..!!

编辑: 如果我想使用类似的东西

if (listFromFile != nil)

    [peopleList addObjects:[NSImage ImageNAmed:listFromFile];

那我该怎么办?

提前谢谢..!!


我无法解决这个问题。 有人可以帮我吗?

我在我的表格列中拖动了NSImageCell,并且还完成了与NSArrayController的绑定。 当我运行应用程序时,它显示空表,没有任何我的图像并且被冻结。我什至无法关闭它。

这样说的

2011-09-20 16:36:08.647 dictTable[1141:707] NSImageCell's object value must be an NSImage.
2011-09-20 16:36:08.651 dictTable[1141:707] (
0   CoreFoundation                      0x00007fff92984986 __exceptionPreprocess + 198
1   libobjc.A.dylib                     0x00007fff8eb4fd5e objc_exception_throw + 43
2   CoreFoundation                      0x00007fff929847ba +[NSException raise:format:arguments:] + 106
3   CoreFoundation                      0x00007fff92984744 +[NSException raise:format:] + 116
4   AppKit                              0x00007fff9890e051 -[NSImageCell setObjectValue:] + 109
5   AppKit                              0x00007fff98a5f261 -[NSValueBinder _adjustObject:mode:observedController:observedKeyPath:context:editableState:adjustState:] + 901
6   AppKit                              0x00007fff98ea7aee -[NSValueBinder updateTableColumnDataCell:forDisplayAtIndex:] + 145
7   AppKit                              0x00007fff98ee730d -[_NSBindingAdaptor tableColumn:willDisplayCell:row:] + 112
8   AppKit                              0x00007fff9890d948 -[NSTableView preparedCellAtColumn:row:] + 654
9   AppKit                              0x00007fff9891e787 -[NSTableView _drawContentsAtRow:column:withCellFrame:] + 42
10  AppKit                              0x00007fff9891ccbe -[NSTableView drawRow:clipRect:] + 1647
11  AppKit                              0x00007fff9891c49b -[NSTableView drawRowIndexes:clipRect:] + 565
12  AppKit                              0x00007fff9891a6f3 -[NSTableView drawRect:] + 1390
13  AppKit                              0x00007fff98881768 -[NSView _drawRect:clip:] + 3758
14  AppKit                              0x00007fff988af131 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 1583
15  AppKit                              0x00007fff988af55d -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2651
16  AppKit                              0x00007fff9887ed46 -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 1032
17  AppKit                              0x00007fff9887fffb -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 5821
18  AppKit                              0x00007fff9887fffb -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 5821
19  AppKit                              0x00007fff9887fffb -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 5821
20  AppKit                              0x00007fff9887e23c -[NSThemeFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 270
21  AppKit                              0x00007fff9887964a -[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] + 4755
22  AppKit                              0x00007fff98872093 -[NSView displayIfNeeded] + 1676
23  AppKit                              0x00007fff988717d3 _handleWindowNeedsDisplayOrLayoutOrUpdateConstraints + 648
24  CoreFoundation                      0x00007fff92944647 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23

这是我的 case.dict 文件

请任何人帮助我。

【问题讨论】:

【参考方案1】:

通常它是这样工作的 - 你必须将 NSImageCell 从库中拖到要显示图像的表格列上,并将其 value 属性绑定到控制器对象的图像属性。

希望这会有所帮助!

【讨论】:

它给了这个NSImageCell's object value must be an NSImage.任何帮助??? 这意味着您需要在数据源中存储图像 你能告诉我我该怎么做吗??

以上是关于在 NSTableView 中显示图像的主要内容,如果未能解决你的问题,请参考以下文章

NSTableView 透明TableView

在NSTableView中使用第一列拖动图像

可可:用圆角底角掩盖 NSTableView

从代码中显示两个项目 NSTableView 的最简单方法?

NSTableView 在 NSSplitView 中显示不正确

在 nstableview 中显示目录中的数据