Переходные атрибуты и FetchRequest? - PullRequest
0 голосов
/ 28 октября 2011

У меня есть переходный атрибут titleFirstLetter в сущности книги:

- (NSString *)titleFirstLetter 
{
    NSString *tmpValue = nil;

    [self willAccessValueForKey:@"titleFirstLetter"];

    if ([[self title] length] > 0) {
        tmpValue = [[[self title] substringToIndex:1] uppercaseString];
        if ([[NSScanner scannerWithString:tmpValue] scanInt:NULL]) { //return # if its a number
            tmpValue = @"#";
        }
    } else { //sanity in case the attribute is not set.
        tmpValue = @"";
    }

    [self didAccessValueForKey:@"titleFirstLetter"];

    return tmpValue;
}

и я пытаюсь использовать этот атрибут в качестве имени раздела, но при выполнении:

 // Create the sort descriptors array.
NSSortDescriptor *authorDescriptor = [[NSSortDescriptor alloc] initWithKey:@"titleFirstLetter" ascending:YES];
NSSortDescriptor *titleDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:authorDescriptor, titleDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];

// Create and initialize the fetch results controller.
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"titleFirstLetter" cacheName:nil];
self.fetchedResultsController = aFetchedResultsController;
fetchedResultsController.delegate = self;

Я получаю эту ошибку:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException',  
reason: 'keypath titleFirstLetter not found in entity <NSSQLEntity Book id=1>'

пожалуйста, помогите!

1 Ответ

0 голосов
/ 20 ноября 2011

Если вам нужен только индекс раздела, и вам не нужны заголовки разделов, вы можете просто передать атрибут title, и он достигнет того, что вы ищете.

sectionNameKeyPath:@"title"

В противном случае, если вы действительно хотите, чтобы заголовки разделов имели только первую букву, см. этот предыдущий вопрос для полного обсуждения.

...