在Core数据iOS中设置自动增量

我正在使用核心数据,并且希望将auto_increment ID设置为唯一的字段之一。 是否可以在iOS中使用核心数据设置auto_increment? 任何人都可以帮助我一个如何实现这个小示例?

以下是我在数据库中插入logging的代码。 在第一个字段“ID”,我想把它设置为auto_increment,而不是手动插入它。

- (NSManagedObjectContext *)managedObjectContext { NSManagedObjectContext *context = nil; id delegate = [[UIApplication sharedApplication] delegate]; if ([delegate performSelector:@selector(managedObjectContext)]) { context = [delegate managedObjectContext]; } return context; } NSManagedObjectContext *context = [self managedObjectContext]; // Create a new managed object NSManagedObject *newObj = [NSEntityDescription insertNewObjectForEntityForName:@"Users" inManagedObjectContext:context]; [newObj setValue:[NSNumber numberWithInt:userId] forKey:@"id"]; [newObj setValue:theFileName forKey:@"Name"]; 

核心数据没有自动增量function。 它在内部使用SQLite的事实大部分是不相关的 – 如果你专注于像SQL一样的细节,你会得到Core Data严重错误。

如果你想增加一个字段,你必须自己pipe理它。 您可以将当前值保存在应用程序的NSUserDefaults 。 或者,您可以将其放入Core Data使用的持久性存储文件的元数据(请参阅NSPersistentStoreCoordinator方法)。 要么是没问题,只要确保查找它,增加它,并在创build新对象时重新保存它。

但你可能不需要这个领域。 核心数据已经处理每个托pipe对象的唯一ID – 请参阅NSManagedObjectID

这是你可以做的事情,但保存条目后,所以请确保调用saveContext()之前,你会得到这个总是得到零

客观-C

 - (int)getAutoIncrement:(InAppMessage*)inApp { int number = 0; NSURL *url = [[inApp 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 }