2016-01-19 1 views
0

Here`s mon code:Swift. Impossible d'enregistrer le fichier dans DocumentDirectory. Qu'est-ce qui ne va pas?

let fileName = "someFileName" 

func saveDataToFile(urlStr:String){ 
    let url = NSURL(string: urlStr) 
    var data:NSData! 
    let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) 
    let directory = paths[0] 
    let filePath = directory.stringByAppendingPathComponent(self.fileName) 
    print(filePath)//prints /Users/.../Library/Developer/CoreSimulator/Devices/1013B940-6FAB-406B-96FD-1774C670A91E/data/Containers/Data/Application/2F7139D6-C137-48BF-96F6-7579821B17B7/Documents/fileName 

    let fileManager = NSFileManager.defaultManager() 

    data = NSData(contentsOfURL: url!) 
    print(data) // prints a lot of data  
    if data != nil{ 
     fileManager.createFileAtPath(filePath, contents: data, attributes: nil) 
    } 

} 

Maintenant, je veux lire ces données:

func readDataFromFile(){ 
    let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true) 
    let directory = paths[0] 
    let filePath = directory.stringByAppendingPathComponent(self.fileName) 
    print(filePath) // prints the same path 
    let fileManager = NSFileManager.defaultManager() 
    if fileManager.fileExistsAtPath(filePath){ 
      data = fileManager.contentsAtPath(filePath) 
     }else{ 
      print("*****BAD*****") // always prints this which means that file wasn`t created 
     } 
} 

What`s mal avec la première func? Quelle est la bonne façon d'enregistrer un fichier dans DocumentDirectory?

+0

'.createFileAtPath' renvoie un booléen indiquant si l'opération s'est terminée avec succès, vous devriez vérifier cela. – Moritz

+0

J'ai vérifié maintenant et il retourne 'false' ce qui n'est pas une surprise. D'autres suggestions plébiscitent? – Elena

+0

Eh bien, maintenant que nous savons que le deuxième extrait n'est pas le coupable, nous pouvons nous concentrer sur le premier. En le regardant, je suppose que 'filePath' n'est pas correct. Mais c'est juste ma conjecture, * vous * devez déboguer un peu plus. – Moritz

Répondre

2

OK, dans ce cas, la réponse est à la suite:

d'abord besoin de créer le répertoire (dossier aka) et seulement après que le fichier créer à l'intérieur de ce répertoire.

Ajouté à coder ceci:

let fullDirPath = directory.stringByAppendingPathComponent(folderName) 
let filePath = fullDirPath.stringByAppendingPathComponent(fileName) 

do{ 
    try fileManager.createDirectoryAtPath(fullDirPath, withIntermediateDirectories: false, attributes: nil) 
}catch let error as NSError{ 
    print(error.localizedDescription) 
} 

Et comme je l'ai dit après cela, vous créez votre fichier:

fileManager.createFileAtPath(filePath, contents: data, attributes: nil)

Merci à Eric.D

quelqu'un Hope trouveront cela utile.