奇怪的 NSPredicate 行为?

Posted

技术标签:

【中文标题】奇怪的 NSPredicate 行为?【英文标题】:Strange NSPredicate Behaviour? 【发布时间】:2013-10-04 01:39:21 【问题描述】:

目前,我有一个表格视图,其中包含视频对象,具体取决于视频对象的录制日期,这些视频对象是在录制和保存时使用[nsdate date]; 拍摄的。但是,可以在一天内录制多个视频。我按日期对它们进行排序,当有多个相同日期的视频时,它会显示该日期录制的第一个视频,最近的视频按照最新的升序排列。我不确定为什么会发生这种情况,但想检查是否有多个具有相同日期的视频录制,它按标题组织它们。在 SQL 中,我可以执行以下操作:

ORDER BY DATE_RECORDED, TITLE ASC

这是我目前正在做的事情:

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
_managedObjectContext = [appDelegate managedObjectContext];

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"whosVideo == %@", _currentPerson];
[request setPredicate:predicate];
NSEntityDescription *eval = [NSEntityDescription entityForName:@"Video" inManagedObjectContext:_managedObjectContext];
[request setEntity:eval];

NSSortDescriptor *sortDescriptor =
[[NSSortDescriptor alloc] initWithKey:@"date_recorded"
                            ascending:NO
                             selector:@selector(localizedCaseInsensitiveCompare:)];
NSArray *sortDescriptors = [[NSArray alloc]initWithObjects:sortDescriptor, nil];


[request setSortDescriptors:sortDescriptors];

NSError *error = nil;
NSMutableArray *mutableFetchResults = [[_managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
if (mutableFetchResults == nil)
    //handle error


[self setVideoArray:mutableFetchResults];
[self.tableView reloadData];

如果在同一日期记录了多个对象,我将如何处理添加第二个谓词?

【问题讨论】:

你不能只添加第二个排序描述符并按标题排序吗? 【参考方案1】:

如果你想处理多个谓词而不是必须使用 NSCompoundPredicate 尝试如下:-

NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"whosVideo == %@", _currentPerson];

NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"whosVideo == %@", _someOther];

  NSArray *subPredicates = [[NSArray alloc] initWithObjects:predicate1, predicate2,nil];

NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:subPredicates];

【讨论】:

以上是关于奇怪的 NSPredicate 行为?的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate 与 NSString 发生奇怪的崩溃

目标c中的电子邮件地址验证

带有 NSPredicate 的 Fetchrequest 不返回正确的值

iOS 核心数据 - NSFetchRequest 和 NSPredicate 不允许双重格式?

CoreData NSPredicate 数学故障

= vs == 在 NSPredicate 中