2015-08-30 11 views
10

Potrzebuję pomocy w odczytywaniu i zapisywaniu danych do zdalnego pliku plist w mojej aplikacji na iOS za pomocą Swift. Mogę czytać i zapisywać dane w lokalnym, ale nie zdalnym serwerze.Jak odczytać i zapisać dane ze zdalnego pliku plist

Tutaj mój kod do czytania w języku lokalnym.

Zmienne

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!") 
    } 
} 

i wreszcie 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

Co dokładnie trzeba pomóc? Czy możesz dokładniej określić "serwer zdalny"? –

+0

Mam na myśli: w mojej domenie remore istnieje plik plist. Jak mogę tu czytać i zapisywać informacje? –

+2

Nie jestem pewien, czy używanie plist przechowywane na serwerze zdalnym jest właściwym wyborem tutaj. Będzie wiele problemów, z którymi musisz poradzić sobie więcej niż jedna osoba. Jeśli chcesz iść tą trasą, pobierz plik lokalnie, zmień go lokalnie, a następnie prześlij na serwer. Istnieje jednak wiele alternatyw dla zdalnej konfiguracji, takich jak CloudKit, Parse lub podobne. –

Odpowiedz

5

Nie, nie jest natywny sposób czytać i napisać do zewnętrznego .plist używając tylko Swift bez pobierania pliku, dokonywania zmian i ponownie przesłać go. Ewentualnie musisz skonfigurować własny interfejs API na serwerze w celu wykonania dla ciebie czynności odczytu/zapisu.

Jak @Scott H podano w komentarzach, tam lepszy sposób to zrobić:

Jeśli chcesz pójść tą drogą, pobierz plik lokalnie, zmień go lokalnie, a następnie przesłać do serwer. Istnieje jednak wiele alternatyw dostępnych dla zdalnej konfiguracji, takich jak CloudKit, Parse lub podobnych.

Więcej informacji na temat opcji 3rd Party:

+0

Dziękuję, życzę miłego dnia. –

-2

NSMutableDictionary(contentsOfFile: bundlePath)

Stosować contentsOfURL zamiast tego.

+1

Nie, ludzie edytują twój wpis, ponieważ nie powinieneś dodawać komentarza do treści twojego postu, jeśli masz komentarz, umieść go tam, gdzie powinien, w komentarzach ... Przepraszam, jeśli cię obraziłem, mogę były już nie na miejscu, jednak można było uniknąć tego zamieszania, gdyby śledzenie linii Stack Overflow odpowiadało w: [odpowiedź]. –

+1

btw, nic na przepełnieniu stosu można ukryć. Przepełnienie stosu zapisuje każdą wersję każdego posta (i komentarza).Po prostu kliknij edytuj na swoim wpisie i możesz wyświetlić historię zmian. –

Powiązane problemy