在 NSTableView 中显示图像

发布于 2024-12-05 02:03:52 字数 5074 浏览 0 评论 0原文

我正在创建一个表格视图并使用 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

这是我的cases.dict 文件
在此处输入图像描述

任何人都请帮助我。

I am creating a tableview and using NSDictionaryController.
My data comes from case.dict file
I am using this code:

@interface MyClass : NSWindowController{

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

@property (retain) NSDictionary *currentPerson;

MyClass.m file

- (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];

}

It works fine and table gives me image names which are stored in case.dict file at index 0(ZERO).
Now can any one explain me how i get all images but not their names in table?
I am new to cocoa development.
Any help will be appreciated..!!

EDIT :
If i want to use something like

if (listFromFile != nil)
{
    [peopleList addObjects:[NSImage ImageNAmed:listFromFile];
}

then what should i do?

Thanks in advance..!!


I can't get solution for this problem.
Can anyone please help me in this??

I have drage NSImageCell in my table column and also done binding with NSArrayController.
When i run app , it shows empty table without any my image and being freez. I can't even close it.
enter image description here

It says something like this

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

This is my cases.dict file
enter image description here

Anyone please help me in this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

魂归处 2024-12-12 02:03:52

一般来说,它的工作原理是这样的 - 您必须将 NSImageCell 从 Library 拖到要在其中显示图像的表列,并将其 value 属性绑定到控制器对象的图像属性。

希望这有帮助!

Generally it works like this - you have to drag NSImageCell from Library on to table column, in which you want to show image, and bind its value property to an image attribute of your controller object.

Hope this helps !

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文