ios难以获取请求获取的ResultController

ios难以获取请求获取的ResultController,ios,objective-c,nsfetchedresultscontroller,Ios,Objective C,Nsfetchedresultscontroller,我无法为fetchedResultedController创建fetchRequest 我有3种型号: @interface Event : NSManagedObject @property (nonatomic, retain) Entertainment *entertainment; @property (nonatomic, retain) Place *place; @property (nonatomic, retain) NSDate * date;

我无法为fetchedResultedController创建fetchRequest

我有3种型号:

@interface Event : NSManagedObject
    @property (nonatomic, retain) Entertainment *entertainment;
    @property (nonatomic, retain) Place *place;
    @property (nonatomic, retain) NSDate * date;
    @property (nonatomic, retain) NSString * objectId;
    //boolValue
    @property (nonatomic, retain) NSNumber * threeDimensional;
    //others properties
    .......
@end


@interface Entertainment : NSManagedObject
    @property (nonatomic, retain) NSString * name;
    @property (nonatomic, retain) NSString * objectId;
    @property (nonatomic, retain) NSSet *events;
    @property (nonatomic, retain) NSString *classNaming;
    //others properties
    .......
@end


@interface Place : NSManagedObject
    @property (nonatomic, retain) NSString * name;
    @property (nonatomic, retain) NSString * objectId;
    @property (nonatomic, retain) NSSet *events;
    //others properties
    .......
@end
因此,我需要在
tableView
(每行1个位置)中显示具体日期(例如11月1日)和所有活动时间的具体
娱乐场所(例如,活动时间可能为14:30,秒19:10,因此我需要在单元格中显示具体地点的所有时间)

例如:

所以这并不难

- (NSFetchedResultsController *)fetchedResultsControllerForEntertainmentsWithEventsFromEntertainment:(Entertainment *)entertainment 
date:(NSDate *)date
{
    if (!place && !date)
        return nil;
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([Event class])];
    NSDateFormatter *dateFormatter = [NSDateFormatter new];
    dateFormatter.dateFormat = @"yyyy/MM/dd";
    NSDate *startDate = [dateFormatter dateFromString:[dateFormatter stringFromDate:date]];
    NSDateComponents *oneDay = [NSDateComponents new];
    oneDay.day = 1;
    NSDate *endDate = [[NSCalendar currentCalendar] dateByAddingComponents:oneDay toDate:startDate options:0];
    fetchRequest.predicate = [NSPredicate predicateWithFormat:@"date >= %@ AND date < %@ AND entertainment.classNaming == %@ AND entertainment.objectId == %@", startDate, endDate, entertainment.classNaming, entertainment.objectId];
    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"entertainment.name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
    fetchRequest.sortDescriptors = @[sortDescriptor];
    fetchRequest.fetchBatchSize = 20;
    NSFetchedResultsController *fetchResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"place.name" cacheName:nil];
    return fetchResultsController;
}
-(NSFetchedResultsController*)fetchedResultsController for Entertainment来自娱乐:(Entertainment*)娱乐
日期:(NSDate*)日期
{
如果(!地点和日期)
返回零;
NSFetchRequest*fetchRequest=[NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([Event class]);
NSDateFormatter*dateFormatter=[NSDateFormatter new];
dateFormatter.dateFormat=@“yyyy/MM/dd”;
NSDate*startDate=[dateFormatter dateFromString:[dateFormatter stringFromDate:date]];
NSDateComponents*oneDay=[NSDateComponents new];
oneDay.day=1;
NSDate*endDate=[[NSCalendar currentCalendar]dateByAddingComponents:oneDay toDate:startDate选项:0];
fetchRequest.predicate=[NSPredicate predicateWithFormat:@“date>=%@和date<%@和entertainment.classNaming==%@和entertainment.objectId==%@”,startDate,endDate,entertainment.classNaming,entertainment.objectId];
NSSortDescriptor*sortDescriptor=[NSSortDescriptor sortDescriptor With key:@“entertainment.name”升序:是选择器:@选择器(不区分大小写比较:)];
fetchRequest.sortDescriptors=@[sortDescriptor];
fetchRequest.fetchBatchSize=20;
NSFetchedResultsController*fetchResultsController=[[NSFetchedResultsController alloc]initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@“place.name”cacheName:nil];
返回fetchResultsController;
}
所以我得到了fetchedResultsController,其中每个部分都是带有行数组的位置,每个部分都是这个位置的事件

但我有一个大问题: 每个
事件
都可以三维显示(属性
三维
)。所以,如果Place具有类似3D和非3D事件,则必须将其划分,这样一个单元格将显示Place的3D事件和Place的另一个非3D事件。我做了,但没有找到结果控制器。我需要在fetchRequest中使用什么谓词来进行如下操作:


如果不对您的模型进行一些更改,任何人都无法做到。我认为不能期望事件的获取请求在结果集中多次返回同一事件。为什么不将三维属性从事件移动到位置实体?这将使任务更容易。还要注意,第一个排序描述符必须对应于sectionNameKeyPath。