gpt4 book ai didi

ios - NSFetchedResultsController 与 NSPredicate

转载 作者:行者123 更新时间:2023-11-28 22:14:19 25 4
gpt4 key购买 nike

我正在使用 NSFetchedResultsController 来处理进出我的 UITableView 的数据。一切正常,直到我在上面放了一个 NSPredicate。我需要获取与至少一条未过期或尚未设置过期日期的消息有关系的所有 Thread 对象。所以我使用以下谓词。

NSPredicate *threadPredicate = [NSPredicate predicateWithFormat:@"ANY messages.expiration_date == null OR ANY messages.expiration_date > %@", [NSDate date]];

问题是这会导致 NSFetchedResultsController 表现得很奇怪。如果线程在其消息关系中获得一条新消息,它会删除该行。它也不会插入新的。

我 100% 确定是 NSPredicate 导致了这些行为。没有它,一切正常我只是没有一些我不想过滤掉的数据。

下面是我的数据模型的讨论部分的图片。我还将包括我的 NSFetchedResultsController 的代码。

/**
* Returns a NSFetchedResultsController for the unified inbox
*
* @return Controller for fetched results
*/
- (NSFetchedResultsController *)resultsControllerForUnifiedInbox
{
NSFetchRequest *threadsRequest = [NSFetchRequest fetchRequestWithEntityName:@"Thread"];
NSEntityDescription *threadModel = [NSEntityDescription entityForName:@"Thread" inManagedObjectContext:_mainManagedObjectContext];

[threadsRequest setEntity:threadModel];

NSPredicate *threadPredicate = [NSPredicate predicateWithFormat:@"ANY messages.expiration_date == null OR ANY messages.expiration_date > %@", [NSDate date]];

[threadsRequest setPredicate:threadPredicate];

NSSortDescriptor *threadSort = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO];

[threadsRequest setSortDescriptors:[NSArray arrayWithObject:threadSort]];
[threadsRequest setFetchBatchSize:LiftFetchControllerAtrributeBatchSize];

NSFetchedResultsController *fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:threadsRequest
managedObjectContext:_mainManagedObjectContext
sectionNameKeyPath:nil
cacheName:nil];

return fetchedResultsController;
}

enter image description here

最佳答案

我无法解释您观察到的谓词的奇怪效果,但我假设您的谓词没有按照您的预期进行。

[NSPredicate predicateWithFormat:@"ANY messages.expiration_date == null OR ANY messages.expiration_date > %@", [NSDate date]];

查找具有未设置 expiration_date 的消息或具有可能不同未过期消息的所有线程。你(可能)需要的是

[NSPredicate predicateWithFormat:@"SUBQUERY(messages, $m, $m.expiration_date == null OR $m.expiration_date > %@).@count > 0", [NSDate date]];

关于ios - NSFetchedResultsController 与 NSPredicate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22106799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com