2016-09-22 9 views
8

Próbuję dowiedzieć się, w jaki sposób należy postępować, utrwalacze fox poniżej kodu za pomocą Swift 3.URLResourceValue i setResourceValues ​​Swift 3

let paths = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true) as NSArray 

for path in paths { 
    let dir = path as! String 
    print("the paths are \(path)") 
    let urlToExclude = NSURL.fileURL(withPath: dir) 
    do { 

     try urlToExclude.setResourceValue(NSNumber(value: true), forKey: URLResourceKey.isExcludedFromBackupKey) 

    } catch { print("failed to set resource value") } 
} 

Błąd, że jestem coraz to this

użyłem Powyższy kod do wykluczania plików z kopii zapasowej do iCloud i działał dobrze dla poprzedniej wersji Swift, ale po aktualizacji do Xcode 8 po prostu utknąłem.

Naprawdę doceniam każdą pomoc lub sugestie.

+0

'urlToExclude' jest typu' URL' warto oddać go do 'NSURL': : Niech urlToExclude = NSURL.fileURL (withPath : dir) jako NSURL ' –

+0

@SiavashAlp, który też działał, ale czy nie powinno się zająć sugestią Xcode'a? – Dushyant

Odpowiedz

18

Xcode sugestia "Użyj struct URLResourceValues ​​i URL.setResourceValues ​​(_ :) zamiast" jest monitem napisać coś takiego:

let paths = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true) 

for dir in paths { 
    print("the paths are \(dir)") 
    var urlToExclude = URL(fileURLWithPath: dir) 
    do { 

     var resourceValues = URLResourceValues() 
     resourceValues.isExcludedFromBackup = true 
     try urlToExclude.setResourceValues(resourceValues) 

    } catch { print("failed to set resource value") } 
} 

Spróbuj.

UWAGA

Należy pamiętać, że adres URL pliku musi być var ​​- jeśli jest to niech dostaniesz dziwne komunikaty o błędach (patrz komentarze).

+0

Idealnie! Wygląda na to, że rozwiązał wszystkie błędy i zajął się wszystkimi sugestiami Xcode. Będę teraz uruchamiał testy mojej aplikacji. – Dushyant

+0

Również musiałem dodać to: var urlToExclude = URL (fileURLWithPath: dir as! String) – Dushyant

+0

@ Dushyant, może być brak usunąłem 'as NSArray' z pierwszej linii. – OOPer

11

Oprócz tego, co zapewnia TheEye, upewnij się, że adres URL jest zmienny, a nie dozwolony.

To co sprawiło, że moje prace kodu po migracji do szybkiego 3.

+0

Ok, straciłem 2 godziny z tego powodu. Teraz działa, po ustawieniu go jako var ... czy możesz wyjaśnić, dlaczego tak musi być? –

+0

Ah, znalazłem własną odpowiedź na to pytanie ... Ponieważ adres URL Swift 3 jest strukturą, dlatego nie można wywoływać metod mutacji na niezmiennej wartości, która jest zwracana z pobierającego. Aby zmienić adres URL, najpierw przypisz go do var. –