gpt4 book ai didi

objective-c - 通过 TableView 在核心数据实体中进行计算

转载 作者:行者123 更新时间:2023-12-03 17:21:56 24 4
gpt4 key购买 nike

作为一个完全的 Coca 初学者,我需要帮助来对核心数据实体进行计算。假设实体有 3 个属性:a、b 和 c。

其中 c = a * b

当我更改 TableView 中 a 的条目并包含 a、b 和 c 列时,我希望重新计算 c。

到目前为止,我已经从 NSArrayController 子类化了数组 Controller myArrayController,并将其设置为身份检查器中的自定义类。

在 QT 中,我可以使用 TableView 发出的信号,以防单元格发生更改。我将如何在 cocoa 中做到这一点?如果我按住 Control 并拖动按钮并创建一个操作,则显然在单击该按钮时会触发该操作。但是使用文本字段单元格...?当 a 列中的值发生更改时,如何计算 c?(我的第一个想法是按住ctrl键将一个 Action 拖到数组 Controller 中;但说实话,我对机制的理解还不够透彻,在书中找不到合适的例子来判断我是否走错了方向)

最佳答案

首先:

重写实体类中的访问器方法

@implementation Entity

@dynamic a;
@dynamic b;
@dynamic c;

-(NSNumber*) c
{
return [NSNumber numberWithDouble:[self.a floatValue]*[self.b integerValue]];
}

-(void)didChangeValueForKey:(NSString *)key
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"needSave" object:self];
[[NSNotificationCenter defaultCenter] postNotificationName:@"needUpdate" object:self];
[super didChangeValueForKey:key];
}

@end

在您的 Controller 中,您应该将其添加到 didLoad 方法或 applicationDidFinishLaunching 中(如果它是 appDelegate):

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(updateTables)
name:@"needUpdate"
object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(save)
name:@"needSave"
object:nil];

-(void)updateTables
{
[table reloadData];
}

-(void)save
{
NSError *err = nil;
[self.managedObjectContext save:&err];
}

因此,当数组 Controller 访问c属性时,她将重新计算。但不要忘记在xcdatamodel的属性检查器中为c属性设置Transient属性。

enter image description here

并且您永远不应该使用 setC: 方法。

第二:

您不应该编写 NSArrayController 的子类来处理自定义实体。

关于objective-c - 通过 TableView 在核心数据实体中进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22145905/

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