Nel mio file di intestazione, mi permetto di aggiungere il seguente:
@interface myAppDelegate : NSObject <UIApplicationDelegate> {
...
NSString *databaseName;
}
extern NSString * const kDefaultDatabaseName;
extern NSString * const kAppDatabaseNameKey;
Nel mio file di implementazione, vorrei aggiungere quanto segue:
NSString * const kDefaultDatabaseName = @"myDefaultDatabaseName";
NSString * const kAppDatabaseNameKey = @"kAppDatabaseNameKey";
@implementation myAppDelegate
+ (void) initialize {
if ([self class] == [MyAppDelegate class]) {
UIApplication* myApp = [UIApplication sharedApplication];
NSString *defaultDatabaseName = kDefaultDatabaseName;
NSMutableDictionary *resourceDict = [NSMutableDictionary dictionary];
[resourceDict setObject:defaultDatabaseName forKey:kAppDatabaseNameKey];
}
}
- (void) applicationDidFinishLaunching:(UIApplication *)application {
...
databaseName = [[NSUserDefaults standardUserDefaults] stringForKey: kAppDatabaseNameKey];
}
...
- (void) applicationWillTerminate:(UIApplication *)application {
...
[[NSUserDefaults standardUserDefaults] setObject:databaseName forKey:kAppDatabaseNameKey]
}
Quando i tuoi avvio dell'applicazione, se non ci sono pre - le impostazioni predefinite utente esistenti, +initialize
creano un nuovo dizionario NSUserDefaults
con qualsiasi valore impostato come database predefinito in kDefaultDatabaseName
.
Al termine dell'avvio dell'applicazione, il membro databaseName
assume il valore impostato nel dizionario NSUserDefaults
. Questo può essere il kDefaultDatabaseName
o qualunque sia stato aggiornato dopo aver eseguito l'applicazione.
Mentre si esegue l'applicazione, l'utente può modificare il valore di databaseName
in qualcos'altro.
Poco prima che l'applicazione termini, il valore di databaseName
viene scritto nel dizionario NSUserDefaults
. Alla successiva apertura dell'applicazione, databaseName
assumerà il nuovo valore aggiornato.
Non è necessario attendere il termine dell'applicazione prima di scrivere questo aggiornamento nel dizionario. Ad esempio, è possibile farlo immediatamente dopo che l'utente ha modificato databaseName
in qualcosa di nuovo. Ma dipende da te.
fonte
2009-04-25 20:22:04