gpt4 book ai didi

objective-c - 如何根据现有 NSManagedObject 值在 NSManagedObject 派生类中设置默认值?

转载 作者:行者123 更新时间:2023-12-03 18:02:15 31 4
gpt4 key购买 nike

我有一个 NSManagedObject 派生类 OrderMO,它具有 NSDate 类型的属性 OrderDate。我希望 OrderDate 的默认值是尚无关联订单的第一个月的第一个星期一。

为此,我重写 NSManagedObject 的 awakeFromInsert 函数并设置 OrderDate 的值,如下所示:

- (void) awakeFromInsert
{
[super awakeFromInsert];
[self setValue:[self getNextOrderDate] forKey:@"OrderDate"];
}

自定义函数 getNextOrderDate 计算适当的日期并返回它。问题是 getNextOrderDate 调用executeFetchRequest,这显然是awakeFromInsert 调用期间的禁忌。我尝试过执行 this article 中描述的操作,但这并没有解决我的问题。在那篇文章中,通过调用 self PerformSelector 延迟对executeFetchRequest 的调用,直到 NSManagedObject 初始化之后,解决了该问题。就我而言,我只得到 2 个垃圾行。

我考虑过对我的 Orders ArrayController 进行子类化以覆盖添加函数,但也不知道该怎么做。

有人可以告诉我基于相同实体类型的现有 NSManagedObject 初始化 NSManagedObject 属性的正确方法吗?在同一个数组中,其值取决于现有对象的值?

最佳答案

嗯,一种方法是获取特定值。它只返回一个字典,我很确定它不会触发与获取错误或对象相关的所有通知。您应该能够只提取您想要的一个日期,而无需引发所有花哨的事情。但是,我从未在这种特定情况下测试过这一点。

另一种方法是直接创建托管对象,即就像非托管对象一样,根据需要填充属性,然后才将托管对象插入到上下文中。不是很优雅,但它可以工作,并且不会引发一堆通知。

一些 Core Data 人员为其 NSManagedObject 子类编写自己的插入类方法。您可能想在这里使用它。例如

+(OrderMO *) insertOrderMOIntoManagedObjectContext:(NSManagedObjectContext *) aContext{
OrderMO *newOrder=[[OrderMO alloc] init];
// pefrom fetch on aContext to find the next order date
newOrder.orderDate=//... fetched order date
[aContext insertObject:newOrder];
}

关于objective-c - 如何根据现有 NSManagedObject 值在 NSManagedObject 派生类中设置默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5236585/

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