2015-07-28 3 views
4

Я верю, что что-то изменилось в Swift 2, потому что ни один учебник о том, как читать и писать в списки свойств, похоже, работает.Swift 2 iOS 9: Чтение и запись Плиста

Может ли кто-нибудь, кто занимается разработкой iOS 9, поделиться своим методом R/W с Plists с помощью Swift 2 на Xcode 7?

+0

Не могли бы вы отправить код, который вы пробовали, и его ошибки? –

ответ

2

Это работает для меня на прошивке 9 и Xcode 7:

let filePath = NSBundle.mainBundle().pathForResource("FileName", ofType: "plist")!  
let stylesheet = NSDictionary(contentsOfFile:filePath) 

Единственное, что результат NSDictionary и не Dictionary.

1

Надеюсь, это полезно - без кода трудно ответить.

Изменение, которое меня сработало, заключается в том, что при копировании файла plist в каталог документов метод stringByAppendingPathComponent больше не доступен. Вместо этого вы должны использовать NSURL.

Если у вас есть метод preparePlistForUseMethod, он должен выглядеть следующим образом.

let rootPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, .UserDomainMask, true)[0] 
     let url = NSURL(string: rootPath) 
     plistPathInDocument = (url?.URLByAppendingPathComponent("plistfilename.plst").absoluteString)! 

if !NSFileManager.defaultManager().fileExistsAtPath(plistPathInDocument){ 
      let plistPathInBundle = NSBundle.mainBundle().pathForResource("plistfilename.plst", ofType: "plist")! 

      do{ 
      try NSFileManager.defaultManager().copyItemAtPath(plistPathInBundle, toPath: plistPathInDocument) 
       print("plist copied") 
      } 
      catch{ 
       print("error copying plist!") 
      } 
     } 
     else{ 
      print("plst exists \(plistPathInDocument)") 
    } 
} 
+0

Одна проблема, я заметил, что я обращался к NSDicrionary, в то время как структура была в форме массива, и это возвращало нулевой словарь. – Adeel

1

Для чтения в PLIST я инкапсулировал логику в Singleton. В моем случае я хочу прочитать файл URLs.plist.

class URLs { 

    class var sharedInstance: URLs { 
     struct Singleton { 
      static let instance = URLs() 
     } 
     return Singleton.instance 
    } 

    private var urls: NSDictionary! 

    required init() { 
     let filePath = NSBundle.mainBundle().pathForResource("URLs", ofType: "plist")! 
     self.urls = NSDictionary(contentsOfFile:filePath) 
    } 

    var backendBaseUrl: String { 
     get { 
      return urls["BackendBaseUrl"] as! String 
     } 
    } 

    var locationEndpoint: String { 
     get { 
      return urls["LocationEndpoint"] as! String 
     } 
    } 

} 

Везде, где вы должны получить доступ к одной из этих URL-адресов, вы просто:

URLs.sharedInstance.backendBaseUrl 

Это прекрасно работает с Xcode 7.1 и Swift 2.1.

Смежные вопросы