En mi archivo de cabecera, debo añadir lo siguiente:
@interface myAppDelegate : NSObject <UIApplicationDelegate> {
...
NSString *databaseName;
}
extern NSString * const kDefaultDatabaseName;
extern NSString * const kAppDatabaseNameKey;
En mi archivo de implementación, me gustaría añadir lo siguiente:
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]
}
Cuando se inicia la aplicación, si no hay pre -existentes predeterminados del usuario, +initialize
crea un nuevo diccionario NSUserDefaults
con lo que haya configurado para ser su base de datos predeterminada en kDefaultDatabaseName
.
Cuando la aplicación termina de iniciarse, el miembro databaseName
toma el valor establecido en el diccionario NSUserDefaults
. Puede ser el kDefaultDatabaseName
o lo que sea que se haya actualizado después de ejecutar su aplicación.
Mientras se ejecuta la aplicación, el usuario puede cambiar el valor de databaseName
a otra cosa.
Justo antes de que la aplicación finalice, el valor de databaseName
se escribe en el diccionario NSUserDefaults
. La próxima vez que se abra la aplicación, databaseName
asumirá el nuevo valor actualizado.
Usted no tiene que esperar a que la aplicación terminar antes de escribir esta actualización al diccionario. Podría, por ejemplo, hacer esto inmediatamente después de que el usuario cambie databaseName
a algo nuevo. Pero eso depende de ti.