ami*_*far 0 entity core-data insert record nsarraycontroller
我试图在互联网上找到我的问题的答案,但我不能.我在Core数据中有一个简单的实体,它具有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"];
}
Run Code Online (Sandbox Code Playgroud)
这是相当直接的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"];
}
Run Code Online (Sandbox Code Playgroud)
这也是非常简单的Core Data访问.我建议您阅读核心数据的工作原理.
另外,使用日期作为唯一是一个非常糟糕的设计.
马库斯,谢谢你的回答.这真的很有帮助.我是核心数据的新手,所以我有一些问题可以让事情变得更清晰.
第一种方法的代码设置了两个值,但它没有将新记录插入表中.如何将新创建的记录插入表中?
您需要了解Core Data的工作原理.Apple拥有关于Core Data如何工作的精彩文档,如果失败,您可以购买我的书.有一些关于如何在互联网上使用核心数据的信息.
我应该把第一种方法放在哪里?在我的.m文件中?
这是基本的Objective-C.如果你问这个问题,你需要先退一步,先学习语言的基础知识.
你提到我需要在控制器中添加第二种方法.但是控制器是在xib文件中定义的.如何添加第二种方法呢?
永远不会在xib文件中定义控制器.它在xib文件中引用.同样,在深入研究之前,您需要回到Objective-C的工作原理并学习基础知识.
| 归档时间: |
|
| 查看次数: |
7427 次 |
| 最近记录: |