Tôi mới ở dữ liệu cốt lõi và đang cố gắng tìm ra cách tạo một tùy chỉnh sectionNameKeyPath
trong số NSFetchedResultsController
của mình. Tôi có một đối tượng được quản lý với một thuộc tính được gọi là acctPeriod
. Nó là NSString
. Tôi muốn tạo các phần dựa trên 4 ký tự đầu tiên của trường này. 4 ký tự đầu tiên đại diện cho năm của kỳ kế toán và không cần phải lưu.Dữ liệu cốt lõi tùy chỉnh SectionNameKeyPath
Tôi đã đi qua trang web này và đã xem các bài đăng về các thuộc tính tạm thời nhưng tôi dường như không thể khiến chúng hoạt động. Về cơ bản tôi muốn điều này và sau đó chỉ định periodYear
cho số sectionNameKeyPath
của tôi.
@dynamic periodYear;
-(NSString *)periodYear
{
return [self.acctPeriod substringToIndex:4];
}
Mọi trợ giúp sẽ được đánh giá cao.
** CẬP NHẬT: Sử dụng Martin R. trả lời, tôi có thể làm cho nó hoạt động như mong đợi.
- (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;
}
OK, điều đó đã hiệu quả. Tôi đã thử điều này trước nhưng vấn đề là tôi đang cố gắng chỉ để tải 1 trong các thực thể của tôi, acctPeriod, và sắp xếp nó theo periodYear.Vì vậy, tôi đã sử dụng [fetchRequest setPropertiesToFetch: [NSArray arrayWithObjects: [entityProperties objectForKey: @ "acctPeriod"], nil]]; có vẻ không hoạt động. Tôi đã cố gắng để đặt periodYear như entityProperty nhưng tôi biết rằng nó không phải. Tôi nhận được lỗi này: 'Khoảng thời gian đường dẫn không hợp lệYăm được chuyển đến setPropertiesToFetch:' Bất kỳ suy nghĩ nào? – theDVUSone
@ theDVUSone: Nếu bạn sử dụng 'propertiesToFetch' thì có thể bạn phải định nghĩa' periodYear' làm thuộc tính tạm thời và thêm nó vào 'propertiesToFetch'. Tôi đã không thử nó, nhưng đó là những gì tôi giả định. –
Tôi đã phạm sai lầm khi khai báo một @property đã triển khai trình thu thập dữ liệu. Giải pháp này ít nhiều chỉ ra rằng nó chỉ là một tuyên bố phương pháp. – JLust