2015-08-30 17 views
10

Ho bisogno di aiuto per leggere e scrivere dati in un file plist remoto nella mia applicazione iOS con Swift. Posso leggere e salvare dati in locale ma non con un server remoto.Come leggere e salvare i dati da un file plist remoto

Qui, il mio codice da leggere in locale.

Variabili

var VintiInizialiID: AnyObject! 
    var PersiInizialiID: AnyObject! 
    var CampionatoID: AnyObject! 
    var coefficientetorneoID: AnyObject! 

loadPlistData()

func loadPlistData() { 

    var VintiInizialiKey = "VintiIniziali" 
    var PersiInizialiKey = "PersiIniziali" 
    var TutorialKey = "Tutorial" 
    var coefficientetorneoKey = "CoefficienteTorneo" 
    var CampionatoKey = "Campionato" 


    // getting path to database.plist 
    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray 
    let documentsDirectory = paths[0] as! String 
    let path = documentsDirectory.stringByAppendingPathComponent("database.plist") 

    let fileManager = NSFileManager.defaultManager() 

    //check if file exists 
    if(!fileManager.fileExistsAtPath(path)) { 
     // If it doesn't, copy it from the default file in the Bundle 
     if let bundlePath = NSBundle.mainBundle().pathForResource("database", ofType: "plist") { 

      let resultDictionary = NSMutableDictionary(contentsOfFile: bundlePath) 
      println("Bundle database.plist file is --> \(resultDictionary?.description)") 

      fileManager.copyItemAtPath(bundlePath, toPath: path, error: nil) 
      println("copy") 
     } else { 
      println("database.plist not found. Please, make sure it is part of the bundle.") 
     } 
    } else { 
     println("database.plist already exits at path.") 
     // use this to delete file from documents directory 
     //fileManager.removeItemAtPath(path, error: nil) 
    } 

    let resultDictionary = NSMutableDictionary(contentsOfFile: path) 
    println("Loaded database.plist file is --> \(resultDictionary?.description)") 

    var myDict = NSDictionary(contentsOfFile: path) 

    if let dict = myDict { 
     //loading values 
     VintiInizialiID = dict.objectForKey(VintiInizialiKey)! 
     PersiInizialiID = dict.objectForKey(PersiInizialiKey)! 
        CampionatoID = dict.objectForKey(CampionatoKey)! 
     coefficientetorneoID = dict.objectForKey(coefficientetorneoKey)! 


     //... 
    } else { 
     println("WARNING: Couldn't create dictionary from GameData.plist! Default values will be used!") 
    } 
} 

e infine SavePlistData()

func Saveplistdata() { 



    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) as NSArray 
    let documentsDirectory = paths.objectAtIndex(0)as! NSString 
    let path = documentsDirectory.stringByAppendingPathComponent("database.plist") 

    var dict: NSMutableDictionary = ["XInitializerItem": "DoNotEverChangeMe"] 
    //saving values 
    dict.setObject(VintiInizialiID, forKey: "VintiIniziali") 
    dict.setObject(PersiInizialiID, forKey: "PersiIniziali") 
    dict.setObject(CampionatoID, forKey: "Campionato") 
    dict.setObject(coefficientetorneoID, forKey: "CoefficienteTorneo") 

    //... 

    //writing to database.plist 
    dict.writeToFile(path, atomically: false) 

    let resultDictionary = NSMutableDictionary(contentsOfFile: path) 
    // println("Saved database.plist file is --> \(resultDictionary?.description)") 
} 
+0

Che cosa hai bisogno di aiuto con? Puoi essere più specifico riguardo al "server remoto"? –

+0

Voglio dire: sul mio dominio remore c'è un file plist. Come posso leggere e salvare le informazioni qui? –

+2

Non sono sicuro che l'uso di un plist memorizzato su un server remoto sia la scelta giusta qui. Ci saranno molti problemi da affrontare se hai più di una persona a farlo. Se si desidera seguire questa rotta, scaricare il file localmente, modificarlo localmente e quindi caricare sul server. Tuttavia, ci sono molte alternative disponibili per la configurazione remota come CloudKit, Parse o simili. –

risposta

5

No, non c'è un modo nativo per leggere e scrivere a un esterno .plist utilizzando solo Swift senza scaricare il file, apportare modifiche e ri-caricarlo. In alternativa, devi configurare la tua API su un server per eseguire le azioni di lettura/scrittura per te.

Come @ Scott H affermato nei commenti, c'è un modo migliore per fare questo:

Se si vuole seguire questa strada, scaricare il file in locale, modificarlo localmente e quindi caricare sul server. Tuttavia, esistono molte alternative disponibili per la configurazione remota come CloudKit, Parse o simile.

Per saperne di più su 3rd opzioni di partito:

+0

Grazie, buona giornata. –

-2

NSMutableDictionary(contentsOfFile: bundlePath)

Utilizzare contentsOfURL invece.

+1

No, le persone stanno modificando il tuo post perché non dovresti aggiungere commenti al corpo del tuo post, se hai commenti, mettilo dove dovrebbe andare, nei commenti ... Mi scuso se ti ho offeso, posso sono stati fuori linea, tuttavia questa confusione avrebbe potuto essere evitata se aveste seguito Stack Overflow rispondendo alla linea guida in: [risposta]. –

+1

btw, non è possibile nascondere nulla sullo stack overflow. Stack overflow salva ogni versione di ogni post (e commento).Basta fare clic su modifica sul tuo post ed è possibile visualizzare la cronologia delle revisioni –