Программа, над которой я работаю, является модифицированной версией «CoreDataBooks», взятой из примера кода Apple iPhone. В «CoreDataBooks» есть список авторов, у некоторых из которых есть несколько книг. Контроллер навигации настроен, разделы разделены по имени автора. В каждом разделе есть список книг для каждого автора.
Итак, я взял этот код и пытаюсь составить список имен, упорядоченных по разделам. Моя сущность называется «Пациент». Каждая сущность имеет атрибуты myDate и myName, а также несколько других. Я хочу упорядочить разделы по myDate со списком имен в каждом разделе, все из которых имеют одинаковую дату.
У меня возникли проблемы с методом NSFetchedResultsController. Когда даты создаются с использованием средства выбора даты, все они имеют временную метку. Эта временная метка делает их разными, и они будут помещены в отдельные разделы, если вы сортируете по myDate в методе sectionNameKeyPath.
Я провел довольно обширный поиск в Интернете и нашел решение, приведенное ниже. Вы создаете другой переходный атрибут, NSString, а затем используете его для сортировки разделов. Это делается путем создания форматера даты, который показан ниже. Я включил мой установщик для моей NSString, а также метод NSFetchedResultsController.
Любая помощь будет принята с благодарностью.
- (NSFetchedResultsController *)fetchedResultsController {
if (fetchedResultsController != nil) {
return fetchedResultsController;
}
PatientsAppDelegate*appDelegate=[[UIApplication sharedApplication]delegate];
NSManagedObjectContext*managedObjectContext=appDelegate.managedObjectContext;
// Create and configure a fetch request with the Book entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Patient" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
// Create the sort descriptors array.
NSSortDescriptor *dateDescriptor = [[NSSortDescriptor alloc] initWithKey:@"myDate" ascending:YES];
NSSortDescriptor *nameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"myName" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:dateDescriptor, nameDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// NSLog(@"%@",myFormattedDate);
// Create and initialize the fetch results controller.
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext
sectionNameKeyPath:@"transactionDay"
cacheName:@"Root"];
self.fetchedResultsController = aFetchedResultsController;
fetchedResultsController.delegate = self;
// Memory management.
[aFetchedResultsController release];
[fetchRequest release];
[dateDescriptor release];
[nameDescriptor release];
[sortDescriptors release];
return fetchedResultsController;
}
- (NSString *)transactionDay{
[self willAccessValueForKey:@"transactionDay"];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM dd,yyyy"];
NSString*someString=[dateFormatter stringFromDate:[self valueForKey:@"myDate"]];
[self didAccessValueForKey:@"transactionDay"];
return someString;
}
Текущая ошибка, которую я получаю: «Пациент сущности не соответствует значению ключа для ключа «actionDay» »
Спасибо, еще раз.