我遇到了自定义单元格视图表的问题NSTableView + NSArrayController + Core Data
。将项目保存到核心数据没有问题,但如果我想在收到NSArrayController
更改的通知后刷新表视图(初始化加载和显示表没有问题),我得到异常"Invalid parameter not satisfying: aString != nil"
,断点如图2所示。通过调试,我看到 of 中的项目数arrangedObjects
确实发生了NSArrayController
正确的变化。为什么我在方法中得到了这个异常- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
是否有可能NSArrayController
在核心数据中保存项目完成之前收到更改通知?当我尝试在桌子上显示它们时,新保存项目的某些属性以某种方式为零?
我的一些代码TableController
@interface TableController : NSController <NSTableViewDataSource, NSTableViewDelegate>
@property IBOutlet NSArrayController* arrayController;
@property IBOutlet TableView *tableView;
@property IBOutlet NSSearchField *searchField;
@property PasteboardItem *actualItem;
- (BOOL)isFiltering;
- (BOOL)copySelectedItemToPasteboard;
- (IBAction)clickOnRemoveButton:(id)sender;
- (IBAction)clickOnCopyButton:(id)sender;
@end
@implementation TableController
- (id)init
{
self = [super init];
if (self) {
AppDelegate *appDelegate = (AppDelegate *) [[NSApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
_arrayController = [[NSArrayController alloc] init];
[_arrayController setManagedObjectContext:context];
[_arrayController setEntityName:@"PasteboardItem"];
[_arrayController fetch:self];
[_arrayController addObserver:self forKeyPath:@"arrangedObjects" options:NSKeyValueObservingOptionNew context:nil];
}
return self;
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"arrangedObjects"]) {
[_tableView reloadData];
}
}
具有两种不同自定义单元格视图的表格视图:
断点异常:
保存到核心数据就可以了: