2010-11-03 47 views

回答

36

如果您正在考慮主鍵的ID,那麼核心數據會爲您處理。在每個對象上都有一個objectID屬性,您可以通過它訪問它。從託管對象上下文創建對象時,核心數據會分配一個臨時ID。當您從託管對象上下文提交更改時,核心數據會分配一個佔位符ID。我不認爲這是手動嘗試和設置這是一個好主意。

閱讀this stackoverflow thread瞭解更多詳情。

+0

如何OBJECTID轉換爲NSNumber的,所以你可以將其存儲在覈心數據? – 2016-03-09 11:07:23

0

你可以那樣做 後

saveContext() 

的Objective-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 
} 
0

我用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) 
相關問題