0

我遇到了自定义单元格视图表的问题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];
    }
}

具有两种不同自定义单元格视图的表格视图:

xib 文件

断点异常:

带断点的方法

保存到核心数据就可以了:

成功保存核心数据

4

0 回答 0