【问题标题】:Can we define auto increment attribute in core data?我们可以在核心数据中定义自增属性吗?
【发布时间】:2011-05-04 07:53:23
【问题描述】:

您好,我在我的应用程序中使用核心数据,并希望将每个实体中的 ID 属性设置为自动增量。核心数据有可能吗?还是我必须手动插入条目并以编程方式管理增量??

【问题讨论】:

    标签: iphone


    【解决方案1】:

    如果您正在考虑主键的 id,那么核心数据会为您处理这个问题。在每个对象上都有一个 objectID 属性,您可以访问它来查看它。当您从托管对象上下文创建对象时,核心数据会分配一个临时 ID。当您从托管对象上下文提交更改时,核心数据会分配一个永久 id。我认为手动尝试设置它不是一个好主意。

    阅读this stackoverflow thread了解更多详情。

    【讨论】:

    • 如何将 objectId 转换为 NSNumber 以便将其存储在核心数据中?
    【解决方案2】:

    我在NSFetchedResultsController中使用了这种方式:

    第一次排序:

    fetchRequest.sortDescriptors = [NSSortDescriptor(key: "id", ascending: false)]
    

    然后在添加对象方法中:

    // Minimum id value
    var recordID = 1
    if let lastRecordID = fetchedResultsController.fetchedObjects?.first?.id {
        recordID = Int(lastRecordID) + 1
    }
    
    let newRecord = Record(context: persistentContainer.viewContext)
    newRecord.id = Int32(recordID)
    

    【讨论】:

      【解决方案3】:

      你可以这样做 之后

      saveContext()
      

      目标-c:

      - (int)getAutoIncrement {
          int number = 0;
          NSURL *url = [[self objectID] URIRepresentation];
          NSString *urlString = url.absoluteString
          NSString *pN = [[urlString componentsSeparatedByString:@"/"] lastObject];
          if ([pN containsString:"p"]){
              NSString *stringPart = [pN stringByReplacingOccurrencesOfString:@"p" withString:@""]
              number = stringPart.intValue
          }
          url = nil;
          urlString = nil;
          pN = nil;
          stringPart = nil;
          return number;
      }
      

      斯威夫特:

      func getAutoIncremenet() -> Int64   {
          let url = self.objectID.uriRepresentation()
          let urlString = url.absoluteString
          if let pN = urlString.components(separatedBy: "/").last {
              let numberPart = pN.replacingOccurrences(of: "p", with: "")
              if let number = Int64(numberPart) {
                  return number
              }
          }
          return 0
      }
      

      【讨论】:

        猜你喜欢
        • 2016-08-02
        • 1970-01-01
        • 2011-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-22
        • 1970-01-01
        • 2011-05-18
        相关资源
        最近更新 更多