2016-09-22 6 views
8

私は私が得ているエラーは、私が使用thisURLResourceValueとsetResourceValuesスウィフト3

ですスウィフト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") } 
} 

を使用してコードの下キツネの固定を進めるべきかを把握しようとしています上記のコードはiCloudへのバックアップからファイルを除外するためのコードで、以前のSwiftのバージョンでは正常に動作していましたが、Xcode 8にアップデートした後はちょうど立ち往生しています。

私は本当に助けや提案をいただきありがとうございます。

+0

' urlToExclude'はあなたがNSURL' 'にキャストする場合がありますURL''のタイプであるに移行した後、私のコードの作品を​​作っているもの

:dir)NSURL' –

+0

@SiavashAlpとしても機能しましたが、Xcodeの提案は処理してはいけませんか? – Dushyant

答えて

18

Xcodeの提案 "を使用する構造体URLResourceValuesとURL.setResourceValues(_ :)ではなく、" このような何かを書くためにあなたを促すさ:

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

てみてください。

NOTE

は、ファイルのURLをVARなければならないことに注意してください - それはあなたが変なエラーメッセージが表示されますレッツ場合は(コメントを参照してください)。

+0

パーフェクト!すべてのエラーを解決し、すべてのXcodeの提案を処理したようです。今、私のアプリでテストを実行するつもりです。 – Dushyant

+0

また、これを追加するだけでした。var urlToExclude = URL(fileURLWithPath:dir as!String) – Dushyant

+0

@Dushyant、最初の行から 'NSArray'を削除していない可能性があります。 – OOPer

11

さらにTheEyeが提供したものに加えて、URLがvarでありレットではないことを確認してください。 `聞かせurlToExclude = NSURL.fileURL(withPath:SWIFT 3.

+0

これで2時間失ったよ。これは、varとして設定した後で動作します...なぜそれが必要なのか説明できますか? –

+0

ああ、自分自身の答えを見つけました... Swift 3 URLは構造体なので、ゲッターから返された不変の値に対してメソッドを変更することはできません。 URLを変更するには、まずそれをvarに割り当てます。 –