更新 Coredata 属性而不重复
Posted
技术标签:
【中文标题】更新 Coredata 属性而不重复【英文标题】:Update Coredata Attributes without Duplication 【发布时间】:2014-02-06 05:57:51 【问题描述】:我有 3 个文本字段-姓名、年龄、电话号码 每次我在每个字段上输入值都会存储在核心数据中
我还想检查我的数据库中的任何重复,即
首先我要检查名称是否重复 如果有重复,请检查年龄和电话号码。 如果年龄相同,则不能更改。 如果电话号码不同,第二个电话号码将替换第一个电话号码。我尝试了很多.. 请帮助我
我的代码是
NSEntityDescription *entityDescc=[NSEntityDescription entityForName:@"Name" inManagedObjectContext:self.managedObjectContext];
NSFetchRequest *request=[[NSFetchRequest alloc]init];
[request setEntity:entityDescc];
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"sname like %@ ",self.nameTextField.text];
[request setPredicate:predicate];
NSError *error;
NSArray *matchingData=[self.managedObjectContext executeFetchRequest:request error:&error];
if (matchingData.count<=0)
NSEntityDescription *entityDesc=[NSEntityDescription entityForName:@"Name" inManagedObjectContext:self.managedObjectContext];
NSManagedObject *newObject=[[NSManagedObject alloc]initWithEntity:entityDesc insertIntoManagedObjectContext:self.managedObjectContext];
[newObject setValue:self.nameTextField.text forKey:@"sname"];
[newObject setValue:self.ageTextField.text forKey:@"age"];
NSError *error;
[self.managedObjectContext save:&error];
else
int count=0;
for (record *obj in matchingData)
NSEntityDescription *entityDescc=[NSEntityDescription entityForName:@"Name" inManagedObjectContext:self.managedObjectContext];
NSFetchRequest *request=[[NSFetchRequest alloc]init];
[request setEntity:entityDescc];
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"age like %@ ",self.ageTextField.text];
[request setPredicate:predicate];
[request setPredicate:predicate];
NSError *error;
NSArray *matchingData=[self.managedObjectContext executeFetchRequest:request error:&error];
if (matchingData.count<=0)
NSLog(@"Entered");
NSEntityDescription *entityDesc=[NSEntityDescription entityForName:@"Name" inManagedObjectContext:self.managedObjectContext];
NSManagedObject *newObject=[[NSManagedObject alloc]initWithEntity:entityDesc insertIntoManagedObjectContext:self.managedObjectContext];
[newObject setValue:self.ageTextField.text forKey:@"age"];
NSError *error;
[self.managedObjectContext save:&error];
++count;
不是检查属性Age
【问题讨论】:
您的电话号码使用的属性名称是什么?还有你的电话号码的变量名textfield
.
【参考方案1】:
将所有三个详细信息保存在单个实体中。获取给定实体中的所有记录,不带任何谓词。为每条记录创建一个模型类。使用模型类列表执行您的业务逻辑。这将解决您的问题,并使您的应用程序性能更好。
【讨论】:
以上是关于更新 Coredata 属性而不重复的主要内容,如果未能解决你的问题,请参考以下文章
如何在多个 ViewController 中使用 NSFetchedResultsControllerDelegate 而不重复控制器代码?