我试图在互联网上找到我的问题的答案,但我不能。 我在Core数据中有一个简单的实体,它具有Value属性(即整数)和Date属性。我想在我的.m文件中定义两个方法。
第一种方法是ADD方法。它有两个参数:整数值(由用户在UI中输入)和日期(默认为当前日期)。然后根据参数将记录插入实体。
第二种方法就像一种增量方法。它使用Date作为键来查找记录,然后递增该记录的整数值。
我不知道如何编写这些方法。 (假设我们在xib文件中有一个表控制器)
答案 0 :(得分:7)
您要查找的第二种方法不适合添加到实体本身。它需要位于实体之上,最有可能位于控制器对象中。
第一种方法如下:
- (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的工作原理。 Apple拥有关于Core Data如何工作的精彩文档,如果失败,您可以购买我的书。有一些关于如何在互联网上使用核心数据的信息。
我应该把第一种方法放在哪里?在我的.m文件中?
这是基本的Objective-C。如果你问这个问题,你需要先退一步,先学习语言的基础知识。
您提到我需要在控制器中添加第二种方法。但是控制器是在xib文件中定义的。如何将第二种方法添加到其中?
永远不会在xib文件中定义控制器。它在xib文件中引用。同样,在深入了解之前,您需要回到Objective-C的工作原理并学习基础知识。