我试图在互联网上找到我的问题的答案,但我找不到。我在核心数据中有一个简单的实体,它有一个 Value 属性(即整数)和一个 Date 属性。我想在我的 .m 文件中定义两种方法。
第一种方法是 ADD 方法。它有两个参数:一个整数值(由用户在 UI 中输入)和一个日期(默认为当前日期)。然后根据参数将记录插入到实体中。
第二种方法类似于增量方法。它使用 Date 作为键来查找记录,然后增加该记录的整数值。
我不知道如何编写这些方法。(假设我们有一个用于 xib 文件中的表的数组控制器)
我试图在互联网上找到我的问题的答案,但我找不到。我在核心数据中有一个简单的实体,它有一个 Value 属性(即整数)和一个 Date 属性。我想在我的 .m 文件中定义两种方法。
第一种方法是 ADD 方法。它有两个参数:一个整数值(由用户在 UI 中输入)和一个日期(默认为当前日期)。然后根据参数将记录插入到实体中。
第二种方法类似于增量方法。它使用 Date 作为键来查找记录,然后增加该记录的整数值。
我不知道如何编写这些方法。(假设我们有一个用于 xib 文件中的表的数组控制器)
您正在寻找的第二种方法不适合添加到实体本身。它需要位于实体上方的某个位置,很可能在您的控制器对象中。
第一种方法如下:
- (void)updateDate:(NSDate*)date andValue:(NSInteger)value
{
[self setValue:date forKey:@"date"];
[self setValue:[NSNumber numberWithInteger:value] forKey:@"value"];
}
这是相当直接的 KVC(键值编码),我强烈建议您阅读 Apple 关于该主题的文档。
对于您的其他方法,应该在控制器中,您需要执行获取以查找记录。
- (id)findRecordForDate:(NSDate*)date inManagedObjectContext:(NSManagedObjectContext*)moc
{
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:moc]];
[request setPredicate:[NSPredicate predicateWithFormat:@"date == %@", date]];
NSError *error = nil;
NSArray *objects = [moc executeFetchRequest:request error:&error];
NSAssert1(error == nil, @"Error fetching object: %@", [error localizedDescription]);
return [objects lastObject];
}
- (void)incrementEntityWithDate:(NSDate*)date
{
id entity = [self findRecordForDate:date inManagedObjectContext:[self managedObjectContext]];
NSInteger value = [[entity valueForKey:@"value"] integerValue];
value += 1;
[entity setValue:[NSNumber numberWithInteger:value] forKey:@"value"];
}
这也是非常直接的核心数据访问。我建议您阅读 Core Data 的工作原理。
顺便说一句,使用日期作为唯一值是一个非常糟糕的设计。
马库斯,谢谢你的回答。这真的很有帮助。我是核心数据的新手,所以我有几个问题要让事情更清楚。
第一种方法的代码设置了两个值,但它不会将新记录插入到表中。如何将新创建的记录插入表中?
你需要阅读 Core Data 是如何工作的。Apple 有很多关于 Core Data 如何工作的文档,如果失败了,你可以买我的书。互联网上有大量关于如何使用 Core Data 的信息。
我应该把第一种方法放在哪里?在我的 .m 文件中?
这是基本的Objective-C。如果你问这个问题,你需要退后一步,首先学习语言的基础知识。
您提到我需要在控制器中添加第二种方法。但是控制器是在 xib 文件中定义的。我怎样才能添加第二种方法呢?
控制器从未在 xib 文件中定义。它在 xib 文件中被引用。同样,在深入研究之前,您需要回到 Objective-C 工作原理的起点并学习基础知识。