我已经通过这个网站,看过关于瞬态属性的帖子,但我似乎不能让他们上班.基本上我想要这个,然后为我的sectionnameKeyPath分配periodYear.
@dynamic periodYear;-(Nsstring *)periodYear{ return [self.acctPeriod substringToIndex:4];}
任何帮助将不胜感激.
**更新:
使用马丁R.答案,我能够让它按预期工作.
- (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];//Predicatenspredicate *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; }解决方法 以下内容应该运行:实现PeriodYear方法(将使用它)
作为“分区名称键路径”)在您的托管对象子类的类扩展中:
@interface Event (AdditionalMethods)- (Nsstring *)periodYear;@end@implementation Event (AdditionalMethods)- (Nsstring *)periodYear { return [self.acctPeriod substringToIndex:4];}@end
确保acctPeriod被用作提取请求的第一个(或唯一)排序描述符:
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"acctPeriod" ascending:YES];NSArray *sortDescriptors = @[sortDescriptor];[fetchRequest setSortDescriptors:sortDescriptors];
对于获取的结果控制器,使用periodYear作为sectionnameKeyPath:
NSFetchedResultsController *_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedobjectContext:self.managedobjectContext sectionnameKeyPath:@"periodYear" cachename:nil];_fetchedResultsController.delegate = self;self.fetchedResultsController = _fetchedResultsController;
最后添加默认的TitleForheaderInSection方法:
- (Nsstring *)tableVIEw:(UItableVIEw *)tableVIEw TitleForheaderInSection:(NSInteger)section { ID <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section]; return [sectionInfo name];}
或者,您可以将periodYear定义为受管对象的临时属性.
在这种情况下,它也不会存储在数据库中,但可以以按需和缓存计算值的方式实现.
Apple开发人员库中的DateSectionTitles示例项目演示了如何工作.
总结以上是内存溢出为你收集整理的ios – 自定义核心数据SectionNameKeyPath全部内容,希望文章能够帮你解决ios – 自定义核心数据SectionNameKeyPath所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)