2016-09-22 40 views
8

Tôi đang cố gắng tìm ra làm thế nào tôi nên tiến hành sửa chữa fox bên dưới mã sử dụng Swift 3.URLResourceValue và 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") } 
} 

Các lỗi mà tôi nhận được là this

tôi đã sử dụng ở trên mã để loại trừ các tập tin từ sao lưu vào iCloud và nó được sử dụng để làm việc tốt cho phiên bản trước của Swift nhưng sau khi cập nhật lên Xcode 8 tôi chỉ bị mắc kẹt.

Tôi thực sự đánh giá cao bất kỳ trợ giúp hoặc đề xuất nào.

+0

'urlToExclude' là loại của 'URL' bạn có thể muốn quăng nó cho' NSURL': ' để urlToExclude = NSURL.fileURL (withPath : dir) là NSURL' –

+0

@SiavashAlp đã hoạt động nhưng không nên đề xuất Xcode? – Dushyant

Trả lời

18

Các Xcode gợi ý "Sử dụng struct URLResourceValues ​​và URL.setResourceValues ​​(_ :) thay vì" được nhắc bạn viết một cái gì đó như thế này:

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

Vui lòng thử.

LƯU Ý

Xin lưu ý rằng URL tập tin có phải là một var - nếu đó là một phép bạn sẽ nhận được thông báo lỗi lạ (xem ý kiến).

+0

Hoàn hảo! Có vẻ như nó đã giải quyết tất cả các lỗi và xử lý tất cả các đề xuất của Xcode. Bây giờ tôi chạy thử nghiệm trên ứng dụng của tôi. – Dushyant

+0

Ngoài ra tôi chỉ cần thêm điều này: var urlToExclude = URL (fileURLWithPath: dir as! String) – Dushyant

+0

@Dushyant, bạn có thể bị thiếu tôi đã xóa 'như NSArray' khỏi dòng đầu tiên. – OOPer

11

Ngoài những gì TheEye cung cấp, hãy đảm bảo URL của bạn là var và không phải là let.

Đó là những gì làm việc mã của tôi sau khi chuyển sang nhanh chóng 3.

+0

Ok, tôi mất 2 giờ vì điều này. Nó bây giờ hoạt động, sau khi thiết lập nó như là một var ... bạn có thể giải thích tại sao nó cần phải như vậy? –

+0

Ah, tìm thấy câu trả lời của riêng tôi cho rằng ... Vì Swift 3 URL là một cấu trúc, do đó bạn không thể gọi các phương thức đột biến trên giá trị bất biến được trả về từ getter. Để sửa đổi URL, trước tiên hãy gán URL đó cho một biến. –