【问题标题】:can we set primary key in core data我们可以在核心数据中设置主键吗
【发布时间】:2011-09-17 05:26:04
【问题描述】:

我正在制作一个使用核心数据的应用程序。 现在在这里我需要创建一个与我们在 sqlite 中创建的主键相同的主键(自动增量类型)。 这对核心数据是否可行。如果是,那么如何提供任何链接或建议,以及如何进行相同的操作。

问候 姆鲁根

【问题讨论】:

标签: iphone xcode core-data


【解决方案1】:

由于核心数据是一个比通用数据库更多的持久性框架,它抽象了主键。

【讨论】:

    【解决方案2】:

    CoreData 不是数据库,而是它是一种对象关系映射解决方案。它是一个对象持久层。 CoreData 中没有主键或外键的概念。

    如果你想在两个实体之间建立关系。您将定义一个关系,CoreData 负责该关系的存储方式。

    选择一个实体,使用实体属性列表底部的加号按钮,选择添加关系,从下拉列表中选择目标实体。

    选择目标实体,以同样的方式定义逆向关系。

    【讨论】:

      【解决方案3】:

      你不能只使用 NSManagedObject 的 objectID 属性吗?这将为您提供对对象的唯一引用。

      【讨论】:

        【解决方案4】:

        答案是否定的。 为了实现类似的事情, 您可以在表中拥有一个 'id' 字段,然后在插入表中获取 'id' 的最大值,然后将值加 1。

        使用表 ENTITY_USER (users) 中的字段“userID”,获取最高用户 ID。

        + (NSInteger) getMaxUserID
        {
            NSFetchRequest *request = [[NSFetchRequest alloc] init];
            NSEntityDescription *res = [NSEntityDescription entityForName:ENTITY_USER
                                                   inManagedObjectContext:[DataBaseManager sharedInstance].managedObjectContext];
            [request setEntity:res];
        
            NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"userID" ascending:NO];
            NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
            [request setSortDescriptors:sortDescriptors];
            [sortDescriptors release];
            [sortDescriptor release];
        
            [request setFetchLimit:1];
        
            NSError *error = nil;
            NSArray *results = [[DataBaseManager sharedInstance].managedObjectContext executeFetchRequest:request error:&error];
            [request release];
            if (results == nil) {
                NSLog(@"error fetching the results: %@",error);
            }
        
            NSInteger maximumValue = 0;
            if (results.count == 1) {
                CDUser *result = (CDUser *)[results objectAtIndex:0];
                maximumValue =  [result.userID integerValue];
            }
            return maximumValue;
        }
        

        【讨论】:

          猜你喜欢
          • 2011-05-04
          • 2023-03-19
          • 2011-02-05
          • 2010-10-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-18
          相关资源
          最近更新 更多