NSTableView + NSArrayController + Core Data с проблемой "Недопустимый параметр: aString!= Nil"

У меня проблема с таблицей пользовательских ячеек NSTableView + NSArrayController + Core Data, Сохранение элементов в основных данных без проблем, но если я хочу обновить представление таблицы после получения уведомления, NSArrayController изменилось (загрузка и отображение таблицы без проблем), я получаю исключение "Invalid parameter not satisfying: aString != nil" и точка останова как на фото 2. С отладкой я увидел, что количество элементов в 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 файл

Исключение с точкой останова:

метод с точкой останова

Сохранение в основные данные в порядке:

сохранение успеха в основных данных

0 ответов

Другие вопросы по тегам