在 NSTableView 中显示图像
我正在创建一个表格视图并使用 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.
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
Anyone please help me in this.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
一般来说,它的工作原理是这样的 - 您必须将 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 !