更新 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 属性而不重复的主要内容,如果未能解决你的问题,请参考以下文章

RestKit/CoreData 未更新 - 创建重复项

Python如何更新dict而不覆盖其他值[重复]

如何在多个 ViewController 中使用 NSFetchedResultsControllerDelegate 而不重复控制器代码?

从“默认字典”更新值而不删除其键[重复]

TextBox用于显示初始值,而不是从代码更新的值[重复]

如何使用特定行更新 sqlite 表而不重复存在的行?