2016-02-16 3 views
3

Как предотвратить резервное копирование iCloud в моем приложении. Для этого я попытался с NSFileManager. И Как реализовать addSkipBackupAttributeToItemAtURL в Swift?SWIFT: предотвращение резервного копирования файлов на iCloud

I tried with this stuff 

extension NSFileManager{ 
    func addSkipBackupAttributeToItemAtURL(url:NSURL)->Bool{ 
     var error:NSError? 
     let success:Bool = url.setResourceValue(NSNumber.numberWithBool(true), forKey: NSURLIsExcludedFromBackupKey, error: &error); 
     return success; 
    } 
} 

Но это дает мне сообщение об ошибке: Дополнительные погрешности аргумента в вызове

Теперь для вызова функции выше ...

NSFileManager.defaultManager() addSkipBackupAttributeToItemAtURL (NSURL.fileURLWithPath()). ;

+1

Как только вы видите 'ошибку Var:? NSError' вы можете предположить, что это код Swift 1. Вы, наверное, теперь используя Xcode 7, который поставляется с Swift 2. – Moritz

ответ

12

Ваш код выглядит как синтаксис Swift 1.x. Предполагая, что вы используете Swift 2.x, вам нужно использовать родной Swift error-handling syntax. Как это:

extension NSFileManager{ 
    func addSkipBackupAttributeToItemAtURL(url:NSURL) throws { 
     try url.setResourceValue(true, forKey: NSURLIsExcludedFromBackupKey) 
    } 
} 

На callsite, вам нужно обработать ошибку, как это:

do { 
    let url = ... // the URL of the file 
    try NSFileManager.defaultManager().addSkipBackupAttributeToItemAtURL(url) 
} catch { 
    // Handle error here 
    print("Error: \(error)") 
} 
0
class DiskHelper { 

    /// prevent pack up to iCloud for file.By setting this property to true, 
    this file will not be backed up to iCloud. 
    /// 
    /// - Parameter filePath: prevented iCloud backup filePath. 
    func preventiCloudBackupForFile(filePath:String) { 
     do { 
      let url = URL(fileURLWithPath: filePath) 
      try FileManager.default.addSkipBackupAttributeToItemAtURL(url: url as NSURL) 
     } catch { 
      // Handle error here 
      print("Error: \(error)") 
     } 
    } 
} 

И добавить расширение для FileManager.

extension FileManager{ 
    func addSkipBackupAttributeToItemAtURL(url:NSURL) throws { 
     try url.setResourceValue(true, forKey: URLResourceKey.isExcludedFromBackupKey) 
    } 
} 

И может использоваться как этот. например: test.png файл

let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String 
let url = URL(fileURLWithPath: path) 
let filePath = url.appendingPathComponent("test.png").path 
DiskHelper().preventiCloudBackupForFile(filePath: filePath) 
1

Swift 3 версия

do { 
    var resourceValues = URLResourceValues() 
     resourceValues.isExcludedFromBackup = true 
     try url.setResourceValues(resourceValues) 
} catch { 
     print(error.localizedDescription) 
} 
+0

Это работает на Swift 3 и 4. Спасибо! –