【问题标题】:Save data to core data - Swift将数据保存到核心数据 - Swift
【发布时间】:2016-08-19 17:27:01
【问题描述】:

当我将数据保存到 Core Data 时,重复数据不会保存在一行中。 当我保存新数据时,会出现一个新行。这是发生错误(不准确的数据结果)显示。如何处理 Core Data 中的重复数据。

【问题讨论】:

    标签: ios iphone swift ipad core-data


    【解决方案1】:

    对于您的场景,您需要添加一个唯一列来唯一标识一行,如主键,如果您已经添加,请忽略。

    当你要在核心数据实体中插入一个元组时,不要使用

    对象 C:

    [NSEntityDescription insertNewObjectForEntityForName:@"Document" inManagedObjectContext:context];

    斯威夫特:

    NSEntityDescription.insertNewObjectForEntityForName("Document", inManagedObjectContext:context) 
    

    这将每次创建一个新元组。

    相反,

    编写一个方法来检查你要插入的数据是否已经可用。

    如果可用,则返回该记录对象。因此,您可以只更新记录的值,而不是为数据创建新记录。

    例如,

    这里我使用 PortionInbox 作为实体并将唯一值作为 TransID 存储到元组中。

    1. 首先检查数据是否已经存在..

      PortionInbox *portionInbox = [self checkAvailabilityWithTransId:portionDict[@"TransID"] context:context];      
      

      如果(部分收件箱 == 无){ partInbox = [NSEntityDescription insertNewObjectForEntityForName:@"PortionInbox" inManagedObjectContext:context]; }

    2. 如果已存在,请获取 Entity 对象以更新您拥有的值。否则,为新数据创建一个新条目。

    3. 编写一些谓词以从 partInbox 实体中检索该特定条目。

    如下.. 我用 Obj C 编写的。只需将其更改为 Swift。

    -(PortionInbox *)checkAvailabilityWithTransId:(NSString *)transId context:(NSManagedObjectContext *)context{
    
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"PortionInbox" inManagedObjectContext:context];
    
    [fetchRequest setEntity:entity];
    
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"transID contains[cd] %@", transId];
    
    [fetchRequest setReturnsObjectsAsFaults:NO];
    
    [fetchRequest setPredicate:pred];
    
    NSError* error;
    
    NSArray *fetchedRecords = [context executeFetchRequest:fetchRequest error:&error];
    
    if (fetchedRecords.count>0)
    {
        return [fetchedRecords objectAtIndex:0];
    }
    else
    {
        return nil;
    }}
    

    希望对你有帮助..

    【讨论】:

      【解决方案2】:

      要将一些数据保存到 CoreData 你应该使用这个例子 代码 swift 3.0

      let appDelegate = UIApplication.shared.delegate as! AppDelegate
          let context: NSManagedObjectContext = appDelegate.persistentContainer.viewContext
      
          let user = NSEntityDescription.insertNewObject(forEntityName: "Example", into: context)
          user.setValue("GOODDUDE", forKey: "name")
      
          appDelegate.saveContext()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-17
        • 1970-01-01
        • 2017-09-20
        • 2010-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多