clean up settings mechanism (fixes #9 & #62)

* init, load, persist, sync, clear
 * clean up frequent disk syncs which impacted iOS performance
 * insert disk sync into various iOS/OS X lifecycle events
 * implement clear
 * implement save on iOS
 * cleaner dictionary syntax
This commit is contained in:
Justin R. Miller
2014-02-13 12:21:35 -08:00
parent 62c79e05cd
commit 257ccd16bb
8 changed files with 88 additions and 109 deletions

View File

@@ -14,8 +14,9 @@ namespace llmr
{
public:
Settings_iOS();
virtual void save();
virtual void load();
virtual void persist();
virtual void sync();
virtual void clear();
};
}

View File

@@ -12,57 +12,41 @@
using namespace llmr;
Settings_iOS::Settings_iOS() {
NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:
// position
[NSNumber numberWithDouble:longitude], @"longitude",
[NSNumber numberWithDouble:latitude], @"latitude",
[NSNumber numberWithDouble:scale], @"scale",
[NSNumber numberWithDouble:angle], @"angle",
// debug
[NSNumber numberWithBool:debug], @"debug",
nil
];
[[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];
Settings_iOS::Settings_iOS()
{
[[NSUserDefaults standardUserDefaults] registerDefaults:@{ @"longitude" : @(longitude),
@"latitude" : @(latitude),
@"scale" : @(scale),
@"angle" : @(angle),
@"debug" : @(debug) }];
}
void Settings_iOS::load() {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
void Settings_iOS::load()
{
NSDictionary *settings = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
// position
longitude = [defaults doubleForKey:@"longitude"];
latitude = [defaults doubleForKey:@"latitude"];
scale = [defaults doubleForKey:@"scale"];
angle = [defaults doubleForKey:@"angle"];
// debug
debug = [defaults boolForKey:@"debug"];
longitude = [settings[@"longitude"] doubleValue];
latitude = [settings[@"latitude"] doubleValue];
scale = [settings[@"scale"] doubleValue];
angle = [settings[@"angle"] doubleValue];
debug = [settings[@"debug"] boolValue];
}
void Settings_iOS::save() {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:
// position
[NSNumber numberWithDouble:longitude], @"longitude",
[NSNumber numberWithDouble:latitude], @"latitude",
[NSNumber numberWithDouble:scale], @"scale",
[NSNumber numberWithDouble:angle], @"angle",
// debug
[NSNumber numberWithBool:debug], @"debug",
nil
];
// [defaults setPersistentDomain:appDefaults forName:[[NSBundle mainBundle] bundleIdentifier]];
// [defaults synchronize];
void Settings_iOS::persist()
{
[[NSUserDefaults standardUserDefaults] setValuesForKeysWithDictionary:@{ @"longitude" : @(longitude),
@"latitude" : @(latitude),
@"scale" : @(scale),
@"angle" : @(angle),
@"debug" : @(debug) }];
}
void Settings_iOS::clear() {
void Settings_iOS::sync()
{
[[NSUserDefaults standardUserDefaults] synchronize];
}
void Settings_iOS::clear()
{
[NSUserDefaults resetStandardUserDefaults];
}

View File

@@ -139,6 +139,11 @@ class MBXMapView
[displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
}
- (void)dealloc
{
mapView->settings.sync();
}
- (void)updateRender:(NSNotification *)notification
{
[self updateRender];
@@ -165,6 +170,8 @@ class MBXMapView
- (void)pauseRender
{
displayLink.paused = YES;
mapView->settings.sync();
}
- (void)render:(id)sender