2011-11-18 9 views
33

En una aplicación C# siempre utilicé un archivo app.config para guardar algunos datos para que mi aplicación cargue cuando sea necesario (por ejemplo, Cadena de conexión).Archivo de configuración de aplicación iOS

¿Cuál es la mejor manera de guardar información como esta en una aplicación de iOS?

Respuesta

57

Se puede crear un archivo de lista (hay una plantilla para que, en XCode, justo a Archivo -> Nuevo archivo y elija allí), por lo que tendrá algo como "settings.plist", o algo por el estilo. Puede pensar en un plist como un archivo de configuración key => value, con la diferencia de que también puede contener matrices y diccionarios, además del texto simple como valor.

Uso NSBundle para cargar el archivo en su aplicación, como

NSString *path = [[NSBundle mainBundle] pathForResource:@"settings" ofType:@"plist"]; 
NSDictionary *settings = [[NSDictionary alloc] initWithContentsOfFile:path]; 

continuación Puede acceder a las teclas como un diccionario tradicional. Simplemente no te olvides de [liberarlo] después;).

+2

Si fr33d0m es nuevo, probablemente esté usando iOS 5, que usa ARC por defecto (recuento automático de referencias); si ese es el caso, no libere nada. –

+0

Sí, usaré iOS 5. Gracias. – Freedom

+0

Sí, gracias por recordar acerca de ARC, Sergio. –

2

En iOs, cada aplicación tiene un propio entorno limitado que solo estará disponible para esa aplicación. Entonces, si desea que ese archivo se lea solo acceda a guardarlo en el Paquete de aplicación. else guardar en la carpeta de la aplicación.

No se puede acceder directamente a la carpeta de la Aplicación Por lo tanto, si desea guardar su archivo en esa carpeta, debe hacerlo mediante programación.

4

Si acaba de almacenar un conjunto relativamente simple de cosas configuración, puede simplemente usar métodos de serialización NSDictionary 's (no sé cómo vincular al directorio métodos de la clase doc):

NSString *settingsPath = [@"~/pathtoconfig.plist" stringByExpandingTildeInPath]; 

NSMutableDictionary *settings = [NSMutableDictionary dictionary]; 
if([[NSFileManager defaultManager] fileExistsAtPath:settingsPath]){ 
    settings = [NSMutableDictionary dictionaryWithContentsOfFile:settingsPath]; 
} 

// writing settings 
[settings writeToFile:settingsPath atomically:YES]; 

Ya que no sé cómo se familiarice están con objetivo-c, también notaré:

+1

iOS 5 cuenta de referencia automática, y está habilitado por defecto en Xcode. –

+0

Es cierto, me olvidé de eso, aunque no es perfecto. IIRC, tendrá que seguir los estándares de codificación y manejar las dependencias cíclicas. – Jeff

10

Para pequeños bits de datos como una cadena de conexión, usaría NSUserDefaults.

Cuando se desea guardar la cadena de conexión, que haría esto:

[[NSUserDefaults standardUserDefaults] setObject:myConnectionString 
              forKey:@"connectionString"]; 

Cuando se desea cargar, que haría esto:

del archivo de configuración
myConnectionString = [[NSUserDefaults standardUserDefaults] 
          stringForKey:@"connectionString"]; 
+4

Con NSUserDefaults, la primera vez que escribo en el archivo necesito ejecutar la aplicación. Mi objetivo es tener un archivo donde pueda editar el contenido en un editor regular, sin tener que ejecutar la aplicación (Probablemente quiero hacer esto porque estoy acostumbrado a app.config en Windows). Gracias de cualquier manera... – Freedom

2

iOS Aplicación en Swift con iOS 8.3:

let path: String = NSBundle.mainBundle().pathForResource("Info", ofType: "plist")! 
    let nsDictionaryInfoPlist: NSDictionary = NSDictionary(contentsOfFile: path)! 

    // Usage example: Google Maps iOS SDK/API Configuration. 
    GMSServices.provideAPIKey(nsDictionaryInfoPlist.objectForKey("GoogleMapsiOSAPIKey") as! String) 
0

Soy consciente de que llego tarde a la fiesta, pero después de encontrar este desbordamiento de pila que estaba desalentado en la respuesta aceptada, por lo que created a pod para solucionarlo! Esto se basa en la idea de @ RafaelSteil's answer, pero tiene una interfaz más simple, almacena en caché los datos de configuración cargados, y admite pods que proporcionan sus propios valores predeterminados que pueden ser anulados por la aplicación principal. Espero que esto ayude a alguien.

0

Actualización de Swift 3 Xcode 8

Añadir una nueva lista de propiedades a su proyecto llamado "Sample.plist". Luego mira el siguiente ejemplo.

let path: String = Bundle.main.path(forResource: "Sample", ofType: "plist")! 
    let sampleConf: NSDictionary = NSDictionary(contentsOfFile: path)! 
    print(sampleConf.object(forKey: "test") as! String) 
Cuestiones relacionadas