2016-01-31 158 views
0

我嘗試使用NSFileManager和方法createFileAtPath創建一個PLIST文件。最後,該文件已創建,它的大小爲0字節,我甚至可以在Finder中看到該文件的特定PLIST圖標。 但是,當我想打開它(例如與Xcode)它說:The data couldn't be read because it isn't in the correct format。 我想寫入這個文件,但是當它不是正確的格式,我不能這樣做。filemanager.createFileAtPath工作不正確

創建文件有問題,但我不知道它是什麼。 我希望你能幫助我。 這裏是我的代碼:

pListPath = NSURL(fileURLWithPath: reportsPath.path!).URLByAppendingPathComponent("myReports.plist", isDirectory: false) 

       let data: NSData = NSData() 
       var isDir: ObjCBool = false 

       if fileManager.fileExistsAtPath(pListPath.path!, isDirectory: &isDir) 
        { 
         print("File already exits") 
        } 
        else 
        { 
         let success = fileManager.createFileAtPath(pListPath.path!, contents: data, attributes: nil) 

         print("Was file created?: \(success)") 
         print("plistPath: \(pListPath)") 
        } 

reports.path = .../UserDir/.../Documents/Reports

任何幫助,高度讚賞。

+0

在iOS中,您始終必須使用NSURL或NSFileManager創建對文檔文件夾的引用。是你做的嗎? – vadian

+0

我創建了這樣的參考。我從另一個帖子複製它在這裏:'let rootPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask,true).first' – user1895268

回答

1

filemanager.createFileAtPath工作絕對正確,
但你寫一個空NSData對象到磁盤創建一個空文件。
NSData對象不會被隱式序列化爲屬性列表。

要麼使用NSPropertyListSerialization類,要麼 - 更簡單 - 將空字典寫入磁盤。

let dictionary = NSDictionary() 
let success = dictionary.writeToURL(pListPath, atomically: true) 
print("Was file created?: \(success)") 
print("plistPath: \(pListPath)") 

PS:你並不需要從URL

pListPath = reportsPath.URLByAppendingPathComponent("myReports.plist", isDirectory: false) 

創建一個URL,但我建議使用更具描述性的變量名稱分辨String路徑和NSURL例如pListURLreportsURL

+0

非常感謝,它的工作原理 – user1895268