Last active
August 29, 2015 14:17
-
-
Save rbaulin/4b78dc42cdf7c8718142 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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