Skip to content

Instantly share code, notes, and snippets.

@rbaulin
Last active August 29, 2015 14:17
Show Gist options
  • Save rbaulin/4b78dc42cdf7c8718142 to your computer and use it in GitHub Desktop.
Save rbaulin/4b78dc42cdf7c8718142 to your computer and use it in GitHub Desktop.
// related to SO question:
// http://stackoverflow.com/questions/26252432/how-do-i-set-a-auto-increment-key-in-realm/26257616#26257616
// keywords: realm auto increment id primary key autoincrement
//
// two assumptions:
// 1) time always goes forward
// 2) realm and app has shared lifetime:
// no external realms are imported, if app deleted realm is deleted
@interface TSUUID : NSObject
@property (nonatomic) double baseOffset;
@end
static NSString *const kBaseOffsetKey = @"kBaseOffsetKey";
static double const kBaseOffsetDouble = 0.00000001;
@implementation TSUUID
+ (instancetype)sharedInstance
{
static id sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[[self class] alloc] init];
// Do any other initialization stuff here
});
return sharedInstance;
}
- (instancetype)init
{
self = [super init];
if (self) {
}
return self;
}
- (double)baseOffset {
if (!_baseOffset) {
_baseOffset = CFAbsoluteTimeGetCurrent();
id number = [[NSUserDefaults standardUserDefaults] objectForKey:kBaseOffsetKey];
if (!number) {
number = @(_baseOffset);
[[NSUserDefaults standardUserDefaults] setObject:number forKey:kBaseOffsetKey];
}
// jump forward in case stored time > current time
double number_time = [number doubleValue];
if (number_time > _baseOffset) {
_baseOffset = number_time;
}
}
return _baseOffset;
}
- (double)generate {
double time = CFAbsoluteTimeGetCurrent();
if (time == self.baseOffset) {
self.baseOffset = self.baseOffset + kBaseOffsetDouble;
time = self.baseOffset;
}
return time;
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment