Hallo!
Ich bin noch etwas neu in Objective-C und bin gerade dabei im MVC-Pattern folgendes zu Erreichen:
Beim ersten mal starten der App, gibt es für die Einstellungen ein paar Default-Werte die gesetzt sind. Beim Schließen der App werden die Einstellungen in einer Datei gespeichert und beim nächsten Aufrufen ausgelesen und gesetzt.
Dabei möchte ich nicht die NSUserDefaults dafür benutzen.
Model: Preferences : NSObject
View: PreferencesWindow (ist eine nib)
Controller: PreferencesController : NSWindowController
In meiner PreferencesWindow.nib habe ich ein Object gezogen, welches von der Model-Klasse Preferences ist.
Dort habe ich die Bindings auf die entsprechenden Werte gesetzt.
Beispiel:
[Blockierte Grafik: http://imageshack.us/a/img842/8320/ujo9.png]
Mein Model sieht so aus:
Alles anzeigen
Alles anzeigen
Beim starten der Application passiert nun folgendes:
Alles anzeigen
1. Wie setze ich die Default-Werte? Kann ich das innerhalb des nibs machen?
2. Muss ich die preferences.plist zuerst erstellen, bevor ich writeToFile benutzen kann? Oder erstellt er die dann automatisch?
3. Da es später so sein wird, das es profil-optionen gibt, würde ich die einstellungen dazu gerne dem Usernamen zuordnen und mit in die preferences.plist einfügen. Sprich es sollte so aussiehen:
[Blockierte Grafik: http://imageshack.us/a/img594/1416/t0n7.png]
Wie würde ich, da beim Starten der Applikation immer der LETZTE eingeloggte User (mit seinem entsprechenden extraOption-Wert) auch im entsprechenden TextField wieder reingeladen werden sollte, dass hinkriegen?
Ich hoffe ihr könnt mir etwas weiterhelfen
Vielen Dank!
Ich bin noch etwas neu in Objective-C und bin gerade dabei im MVC-Pattern folgendes zu Erreichen:
Beim ersten mal starten der App, gibt es für die Einstellungen ein paar Default-Werte die gesetzt sind. Beim Schließen der App werden die Einstellungen in einer Datei gespeichert und beim nächsten Aufrufen ausgelesen und gesetzt.
Dabei möchte ich nicht die NSUserDefaults dafür benutzen.
Model: Preferences : NSObject
View: PreferencesWindow (ist eine nib)
Controller: PreferencesController : NSWindowController
In meiner PreferencesWindow.nib habe ich ein Object gezogen, welches von der Model-Klasse Preferences ist.
Dort habe ich die Bindings auf die entsprechenden Werte gesetzt.
Beispiel:
[Blockierte Grafik: http://imageshack.us/a/img842/8320/ujo9.png]
Mein Model sieht so aus:
Quellcode
- // Preferences.h
- @interface Preferences : NSObject
- {
- int _irgendeinRadioMenuTag;
- int _nochEinRadioMenuTag;
- NSString *_username;
- NSString *_password;
- BOOL _shouldDoThis;
- BOOL _shouldDoThat;
- }
- @property (nonatomic, assign) int irgendeinRadioMenuTag;
- @property (nonatomic, assign) int nochEinRadioMenuTag;
- @property (nonatomic, copy) NSString *username
- @property (nonatomic, copy) NSString *password;
- @property (nonatomic, assign) BOOL shouldDoThis;
- @property (nonatomic, assign) BOOL shouldDoThat;
- + (Preferences *) sharedPreferences;
- - (BOOL) loadDefaults;
- - (BOOL) saveDefaults;
Quellcode
- // Preferences.m
- #import "Preferences.h"
- @implementation Preferences
- @synthesize irgendeinRadioMenuTag = _irgendeinRadioMenuTag;
- @synthesize nochEinRadioMenuTag = _nochEinRadioMenuTag;
- @synthesize username = _username;
- @synthesize password = _password;
- @synthesize shouldDoThis = _shouldDoThis;
- @synthesize shouldDoThat = _shouldDoThat;
- + (Preferences *) sharedPreferences
- {
- static Preferences *_sharedPreferences = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- _sharedPreferences = [[self alloc] init];
- });
- return _sharedPreferences;
- }
- - (id) init
- {
- self = [super init];
- if (self) {
- }
- return self;
- }
- - (BOOL) loadDefaults
- {
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *docDir = [paths objectAtIndex: 0];
- NSString *preferencesFile = [docDir stringByAppendingPathComponent: @"preferences.plist"];
- BOOL settingsExist = [[NSFileManager defaultManager] fileExistsAtPath:preferencesFile];
- if (settingsExist) {
- NSLog(@"Settings found!");
- NSMutableDictionary *defaultsDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:preferencesFile];
- _irgendeinRadioMenuTag = (int)[[defaultsDictionary objectForKey:@"irgendeinRadioMenuTag"] integerValue];
- _nochEinRadioMenuTag = (int)[[defaultsDictionary objectForKey:@"nochEinRadioMenuTag"] integerValue];
- _shouldDoThis = [[defaultsDictionary objectForKey:@"shouldDoThis"] boolValue];
- _shouldDoThat = [[defaultsDictionary objectForKey:@"shouldDoThat"] boolValue];
- _username = [defaultsDictionary objectForKey:@"username"];
- _password = [defaultsDictionary objectForKey:@"password"];
- }
- return settingsExist;
- }
- - (BOOL) saveDefaults
- {
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *docDir = [paths objectAtIndex: 0];
- NSString *preferencesFile = [docDir stringByAppendingPathComponent: @"preferences.plist"];
- NSMutableDictionary *defaultsDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:preferencesFile];
- [defaultsDictionary setObject:[NSNumber numberWithInt:_irgendeinRadioMenuTag] forKey:@"irgendeinRadioMenuTag"];
- [defaultsDictionary setObject:[NSNumber numberWithInt:_nochEinRadioMenuTag] forKey:@"nochEinRadioMenuTag"];
- [defaultsDictionary setObject:[NSNumber numberWithBool:_shouldDoThis] forKey:@"shouldDoThis"];
- [defaultsDictionary setObject:[NSNumber numberWithBool:_shouldDoThat] forKey:@"shouldDoThat"];
- [defaultsDictionary setObject:_username forKey:@"username"];
- [defaultsDictionary setObject:_password forKey:@"password"];
- if ([defaultsDictionary writeToFile:preferencesFile atomically:YES]) {
- NSLog(@"Successfully wrote Settings to %@", preferencesFile);
- return YES;
- } else {
- NSLog(@"Failed to write Settings to %@", preferencesFile);
- return NO;
- }
- return NO;
- }
- @end
Beim starten der Application passiert nun folgendes:
Quellcode
- - (void) applicationDidFinishLaunching:(NSNotification *)aNotification
- {
- // _preferenceWindow ist einfach eine instanz variable von PreferencesController
- if (_preferenceWindow == nil) {
- _preferenceWindow = [[PreferencesController alloc] initWithWindowNibName:@"Preferences"];
- }
- [_preferenceWindow loadDefaults]; // verweist im controller selbst einfach auf [[Preferences sharedPreferences] loadDefaults]
- }
- - (void) applicationWillTerminate:(NSNotification *)notification
- {
- [_preferenceWindow saveDefaults];
- }
1. Wie setze ich die Default-Werte? Kann ich das innerhalb des nibs machen?
2. Muss ich die preferences.plist zuerst erstellen, bevor ich writeToFile benutzen kann? Oder erstellt er die dann automatisch?
3. Da es später so sein wird, das es profil-optionen gibt, würde ich die einstellungen dazu gerne dem Usernamen zuordnen und mit in die preferences.plist einfügen. Sprich es sollte so aussiehen:
[Blockierte Grafik: http://imageshack.us/a/img594/1416/t0n7.png]
Wie würde ich, da beim Starten der Applikation immer der LETZTE eingeloggte User (mit seinem entsprechenden extraOption-Wert) auch im entsprechenden TextField wieder reingeladen werden sollte, dass hinkriegen?
Ich hoffe ihr könnt mir etwas weiterhelfen
Vielen Dank!
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von mrtnbroder ()