2015-08-30 16 views
10

Tôi cần trợ giúp đọc và ghi dữ liệu vào tệp plist từ xa trong ứng dụng iOS của tôi bằng Swift. Tôi có thể đọc và lưu dữ liệu cục bộ chứ không phải với máy chủ từ xa.Cách đọc và lưu dữ liệu từ tệp plist từ xa

Ở đây, mã của tôi để đọc ở địa phương.

Biến

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

Và Cuối cùng 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

gì chính xác bạn cần giúp đỡ với? Bạn có thể cụ thể hơn về "máy chủ từ xa" không? –

+0

Ý tôi là: trên miền của tôi có một tệp plist. Làm thế nào tôi có thể đọc và lưu thông tin ở đây? –

+2

Tôi không chắc chắn bằng cách sử dụng một plist được lưu trữ trên một máy chủ từ xa là sự lựa chọn đúng ở đây. Sẽ có nhiều vấn đề để giải quyết nếu bạn có nhiều người làm việc này. Nếu bạn muốn đi tuyến đường này, hãy tải xuống tệp cục bộ, thay đổi tệp cục bộ và sau đó tải lên máy chủ. Tuy nhiên, có nhiều lựa chọn thay thế cho bạn để cấu hình từ xa như CloudKit, Parse hoặc tương tự. –

Trả lời

5

Không, đó không phải là cách tự nhiên để đọcviết đến một bên ngoài .plist chỉ sử dụng Swift mà không cần tải tập tin, thay đổi và tải lên lại. Ngoài ra, bạn cần phải thiết lập API của riêng bạn trên một máy chủ để thực hiện các hành động đọc/ghi cho bạn.

Như @Scott H tuyên bố trong các ý kiến, theres một cách tốt hơn để làm điều này:

Nếu bạn muốn đi tuyến đường này, tải về các tập tin địa phương, thay đổi nó tại địa phương, và sau đó tải lên máy chủ. Tuy nhiên, có rất nhiều tùy chọn thay thế cho bạn để định cấu hình từ xa như CloudKit, Phân tích cú pháp hoặc tương tự.

Tìm hiểu thêm về các lựa chọn bên thứ 3:

+0

Cảm ơn bạn, chúc một ngày tốt lành. –

-2

NSMutableDictionary(contentsOfFile: bundlePath)

Sử dụng contentsOfURL thay thế.

+1

Không, mọi người đang chỉnh sửa bài đăng của bạn bởi vì bạn không nên thêm bình luận vào nội dung bài đăng của mình, nếu bạn có bình luận, hãy đưa nó vào vị trí của nó, trong phần bình luận ... Tôi xin lỗi nếu tôi xúc phạm bạn, tôi có thể đã được ra khỏi dòng, tuy nhiên sự nhầm lẫn này có thể tránh được nếu bạn đã theo dõi Stack Overflows trả lời hướng dẫn-line trong: [trả lời]. –

+1

btw, không có gì trên ngăn xếp tràn có thể bị ẩn. Stack tràn tiết kiệm mọi phiên bản của mỗi bài viết (và bình luận).Chỉ cần nhấp vào chỉnh sửa trên bài đăng của bạn và bạn có thể xem lịch sử sửa đổi –

Các vấn đề liên quan