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];
}
}
Табличное представление с двумя различными пользовательскими представлениями ячейки:
Исключение с точкой останова:
Сохранение в основные данные в порядке: