Ben çekirdek verilerine yeniyim ve benim NSFetchedResultsController
bir özel sectionNameKeyPath
nasıl oluşturulacağını anlamaya çalışıyorum. acctPeriod
adlı bir özniteliği olan yönetilen bir nesnem var. Bu NSString
'dur. Bu alanın ilk 4 karakterine dayalı bölümler oluşturmak istiyorum. İlk 4 karakter, hesap döneminin yılını temsil eder ve kaydedilmeye gerek yoktur.Özel Çekirdek Veri SectionNameKeyPath
ben bu site üzerinden gitmiş ve geçici özellikler hakkında Mesajları gördük ama onları işe almak gibi olamaz. Temel olarak bunu istiyorum ve sectionNameKeyPath
benim periodYear
atayın.
@dynamic periodYear;
-(NSString *)periodYear
{
return [self.acctPeriod substringToIndex:4];
}
Herhangi bir yardım için teşekkür ederiz.
** GÜNCELLEME: Martin R. cevabı kullanarak, beklendiği gibi işe almak başardı. o özellik bölüm yolu olarak kullanılabilecek sadece bu yüzden getirme isteği ile elde tüm nesneleri faylanma sonuçlanacaktır olarak
- (NSFetchedResultsController *)fetchedResultsController
{
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Billing" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
// Set the batch size to a suitable number.
[fetchRequest setFetchBatchSize:20];
// Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"acctPeriod" ascending:NO];
NSArray *sortDescriptors = @[sortDescriptor];
//Predicate
NSPredicate *pred = [NSPredicate predicateWithFormat:@"clients = %@", self.client];
NSLog(@"%@",pred);
//[fetchRequest setResultType:NSDictionaryResultType];
//[fetchRequest setReturnsDistinctResults:YES];
[fetchRequest setPredicate:pred];
[fetchRequest setSortDescriptors:sortDescriptors];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"periodYear" cacheName:nil];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _fetchedResultsController;
}
Tamam. Bunu daha önce denedim ama sorun sadece benim varlık, acctPeriod 1 yüklemek ve periodear tarafından sıralamak çalışıyorum olmasıdır.Yani kullanıyordum [fetchRequest setPropertiesToFetch: [NSArray dizisiWithObjects: [entityProperties objectForKey: @ "acctPeriod"], nil]]; Çalışmıyor gibi görünen . PeriodYear öğesini varlıkProperty olarak ayarlamaya çalıştım ama bunun olmadığını biliyorum. Bu hatayı alıyorum: 'Geçersiz keypath periodYear setPropertiesToFetch'e geçti:' Herhangi bir düşünce? – theDVUSone
@theDVUSone: Eğer 'propertiesToFetch' işlevini kullanırsanız, muhtemelen 'periodYear'ı geçici öznitelik olarak tanımlamanız ve' propertiesToFetch 'öğesine eklemeniz gerekir. Denemedim, ama varsaydığım şey bu. –
Bir alıcıyı uygulayan bir @property bildirme hatasını yapıyordum. Bu çözüm az ya da çok, sadece bir yöntem beyanı olması gerektiğine işaret etti. – JLust