Подтвердить что ты не робот

Можно ли определить атрибут auto increment в основных данных?

Здравствуйте, я использую основные данные в своем приложении и хочу установить атрибут ID в каждом объекте как автоинкремент. Возможно ли это в основных данных? Или мне нужно вручную вставить запись и управлять приращением программно?

4b9b3361

Ответ 1

Если вы думаете об идентификаторе для первичных ключей, то основные данные обрабатывают это для вас. На каждом объекте есть свойство objectID, к которому вы можете получить доступ, чтобы увидеть его. Когда вы создаете объект из контекста управляемого объекта, данные ядра присваивают временный идентификатор. Когда вы фиксируете изменения из контекста управляемого объекта, данные ядра присваивают perminant id. Я не думаю, что было бы неплохо вручную попытаться установить это.

Подробнее читайте fooobar.com/questions/95111/....

Ответ 2

Вы можете сделать это так после

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;
}

Swift:

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
}

Ответ 3

Я использовал этот способ с 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)