Я решил это с помощью агрегатов Core Data.Я фактически заканчиваю тем, что назначал удостоверение личности самостоятельно.
По сути, я запрашиваю базовые данные для всех идентификаторов сущностей моей сущности, а затем перебираю их.Если я нахожу идентификатор, который выше текущего временного, я делаю временный идентификатор выше, чем агрегированный.Когда я закончу, у меня автоматически будет идентификатор, который выше, чем самый высокий в списке.Единственный недостаток, который я вижу в этом, - это отсутствие идентификатора.(Я полагаю, что и для этого есть простое исправление.)
//
// Create a new entity description
//
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:self.managedObjectContext];
//
// Set the fetch request
//
NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
[fetchRequest setEntity:entity];
//
// We need to figure out how many
// existing groups there are so that
// we can set the proper ID.
//
// To do so, we use an aggregated request.
//
[fetchRequest setResultType:NSDictionaryResultType];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObject:@"entityID"]];
NSError *error = nil;
NSArray *existingIDs = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (error != nil) {
//
// TODO: Handle error.
//
NSLog(@"Error: %@", [error localizedDescription]);
}
NSInteger newID = 0;
for (NSDictionary *dict in existingIDs) {
NSInteger IDToCompare = [[dict valueForKey:@"entityID"] integerValue];
if (IDToCompare >= newID) {
newID = IDToCompare + 1;
}
}
//
// Create the actual entity
//
MyEntity *newEntity = [[MyEntity alloc] initWithEntity:entity insertIntoManagedObjectContext:self.managedObjectContext];
//
// Set the ID of the new entity
//
[newEntity setEntityID:[NSNumber numberWithInteger:newID]];
//
// ... More Code ...
//