Во-первых, вы без необходимости создаете массив словарей, который не делает ничего, кроме дублирования массива, уже возвращаемого в контроллерах извлеченных результатов.но ты ошибаешься.Этот тип проверки:
if([[category valueForKey:@"EmployeeName"] isKindOfClass:[NSString class]])
... будет оцениваться как TRUE, даже если атрибут не имеет значения, поскольку значение, возвращаемое кодированием значения ключа, будет строкой (из-за сгенерированного метода доступа, который всегда возвращаетстрока.
Лучшее место для обработки пустых полей - это сама модель данных. Просто установите для атрибута EmployeeName
по умолчанию значение «Без имени сотрудника», и вы можете отказаться от всех проверок.
Во-вторых, вы используете противоречивые ссылки на ваш массив. Иногда вы используете self.array
, а иногда просто array
. Вы получите надлежащее сохранение только при использовании первой формы. Если вы используете вторую, ваш массивможет случайно исчезнуть.
В-третьих, в tableView:(UITableView *)tableView cellForRowAtIndexPath:
эта строка:
if(dictionary = [array objectAtIndex:indexPath.row])
... использует неправильную форму доступа, поэтому может найти или не найти объект массива. Эта строка:
cell.textLabel.text = @"(EmployeeName = %@)";
... устанавливает для всего текста ячейки значение "(EmployeeName =)" и, вероятно, приведет к ошибке компиляции. Это должно быть:
cell.textLabel.text = [NSString stringWithFormat:@"(EmployeeName = %@)",[dictionary objectForKey:@"EmployeeName"]];
Вы действительно должны простоиспользованиеконтроллер извлеченных результатов и поля по умолчанию (как указано выше), например:
NSManagedObject *mo=[[fetchedResultsController fetchedObjects] objectAtIndex:index.row]];
cell.textLabel.text = [NSString stringWithFormat:@"(EmployeeName = %@)",[mo valueForKey:@"EmployeeName"]];
Вам не нужно проверять ошибки, поскольку номер строки в таблице всегда соответствует количеству извлеченных управляемых объектов.
Я думаю, вы делаете это намного сложнее, чем необходимо.Вероятно, вы привыкли выполнять множество проверок целостности данных, возвращаемых SQL.Однако Core Data и контроллер извлеченных результатов будут выполнять большую часть этой работы за вас.В простой настройке, подобной этой, вам обычно нужно добавить около десяти строк кода в шаблон контроллера табличного представления.