SWIFT : 防止在 iCloud 上备份文件
SWIFT : Prevent backup files on iCloud
如何在我的应用程序中阻止 iCloud 备份。为此,我尝试使用 NSFileManager。
和
如何在 Swift 中实现 addSkipBackupAttributeToItemAtURL?
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());
您的代码看起来像 Swift 1.x 语法。假设您使用的是 Swift 2.x,则需要使用原生的 Swift error-handling syntax。像这样:
extension NSFileManager{
func addSkipBackupAttributeToItemAtURL(url:NSURL) throws {
try url.setResourceValue(true, forKey: NSURLIsExcludedFromBackupKey)
}
}
在调用点,你需要这样处理错误:
do {
let url = ... // the URL of the file
try NSFileManager.defaultManager().addSkipBackupAttributeToItemAtURL(url)
} catch {
// Handle error here
print("Error: \(error)")
}
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)
Swift 3 个版本
do {
var resourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = true
try url.setResourceValues(resourceValues)
} catch {
print(error.localizedDescription)
}
如何在我的应用程序中阻止 iCloud 备份。为此,我尝试使用 NSFileManager。 和 如何在 Swift 中实现 addSkipBackupAttributeToItemAtURL?
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());
您的代码看起来像 Swift 1.x 语法。假设您使用的是 Swift 2.x,则需要使用原生的 Swift error-handling syntax。像这样:
extension NSFileManager{
func addSkipBackupAttributeToItemAtURL(url:NSURL) throws {
try url.setResourceValue(true, forKey: NSURLIsExcludedFromBackupKey)
}
}
在调用点,你需要这样处理错误:
do {
let url = ... // the URL of the file
try NSFileManager.defaultManager().addSkipBackupAttributeToItemAtURL(url)
} catch {
// Handle error here
print("Error: \(error)")
}
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)
Swift 3 个版本
do {
var resourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = true
try url.setResourceValues(resourceValues)
} catch {
print(error.localizedDescription)
}