gpt4 book ai didi

ios - 核心数据谓词的托管对象中的自定义方法

转载 作者:行者123 更新时间:2023-11-29 02:53:36 25 4
gpt4 key购买 nike

我想根据存储属性的 (NSDate) 月份执行谓词。我知道比较开始和结束日期(手动设置)允许这样做。

但我觉得托管对象类中的自定义方法也应该相当容易地允许这样做吗?好吧,我试过了,但我似乎无法通过让谓词触发它来访问一个简单的方法。这有可能吗?

托管对象文件:

.h文件:

@property (nonatomic,retain) NSNumber *monthOfDate;
-(NSNumber *)monthOfDate;

.m文件:

@synthesize monthOfDate;

-(NSNumber *) monthOfDate
{
NSDate *date = [self start];
NSDateComponents *components = [[NSCalendar currentCalendar]components: NSCalendarUnitMonth fromDate:date];
NSNumber *month = [NSNumber numberWithInteger:[components month]];
return month;
}

这是我的谓词:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"client == %@ AND monthOfDate == %d", clientMO,int 6];

它返回错误:在实体中找不到键路径 monthOfDate。我想是因为它不是实际属性?我怎样才能让它被检测到?

更新

上面的 .h 和 .m 文件来自自动生成的事件类(NSmanaged 对象)。稍后我可能会将我的自定义代码移到一个类别,但到目前为止,不需要修改数据库模型。

下面是带有上述谓词的 FetchedResultsController(在 uiviewcontroller 类中)设置:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Event" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];

NSSortDescriptor *sortfix = [[NSSortDescriptor alloc]initWithKey:@"timeStamp" ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObjects:sortfix,nil]];
[fetchRequest setFetchBatchSize:20];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"client == %@ AND monthOfDate == %d", clientMO,int 6];
[fetchRequest setPredicate:predicate];


NSFetchedResultsController *theFetchedResultsController =

[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext sectionNameKeyPath:sectionKeyPathProperty
cacheName:nil];

//sectionKeyPathProperty is a variable that let's me choose one of multiple transient properties I have created for creating relevant sections.

self.fetchedResultsControllerClient = theFetchedResultsController;
_fetchedResultsControllerClient.delegate = self;

return _fetchedResultsControllerClient;

最佳答案

事实证明,只有当 MO 已经加载到内存中时,这才有可能。 (已获取)

在我使用 FRC 的情况下,情况并非如此,因此我必须创建一个单独的月份属性,该属性在创建 MO 时保存。

感谢用户 Run Loop 回答了一个 4 年前的问题!

关于ios - 核心数据谓词的托管对象中的自定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24181017/

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