保存到 watchOS 2 文档文件夹
Saving to watchOS 2 document folder
我的 iOS 应用程序将数据库发送到 WatchKit (watchOS 2)
。在 WatchKit
中,我使用以下代码获取 watch 文档文件夹以将新文件保存在:
NSURL* fileURL = [[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject] URLByAppendingPathComponent:@"MyDatabase.sqlite"];
这导致 URL:
@"file:///var/mobile/Containers/Data/PluginKitPlugin/47E13085-9030-4ED2-906F-01CBA323F07A/Documents/MyDatabase.sqlite"
然而,当我调用函数时:
[[NSFileManager defaultManager] replaceItemAtURL:fileURL withItemAtURL:url backupItemName:nil options:0 resultingItemURL:nil error:&error];
它抛出一个错误说:
Error Domain=NSCocoaErrorDomain Code=512 "The file “MyDatabase.sqlite” couldn’t be saved in the folder “Documents”."
Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “MyDatabase.sqlite”
如何找到允许我保存到的文件夹?
当然,这段代码在模拟器中运行良好,所以我假设我遗漏了一些不太明显的东西。
BR
弗雷德里克
我认为您的问题是 Apple Watch 扩展程序无法将文件保存到其文档目录。我能够使用应用程序组保存文件。将应用程序组添加到您的权利,然后您应该能够写入以下目录:
let path = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.my.cool.watch.app")
我的 iOS 应用程序将数据库发送到 WatchKit (watchOS 2)
。在 WatchKit
中,我使用以下代码获取 watch 文档文件夹以将新文件保存在:
NSURL* fileURL = [[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject] URLByAppendingPathComponent:@"MyDatabase.sqlite"];
这导致 URL:
@"file:///var/mobile/Containers/Data/PluginKitPlugin/47E13085-9030-4ED2-906F-01CBA323F07A/Documents/MyDatabase.sqlite"
然而,当我调用函数时:
[[NSFileManager defaultManager] replaceItemAtURL:fileURL withItemAtURL:url backupItemName:nil options:0 resultingItemURL:nil error:&error];
它抛出一个错误说:
Error Domain=NSCocoaErrorDomain Code=512 "The file “MyDatabase.sqlite” couldn’t be saved in the folder “Documents”." Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file “MyDatabase.sqlite”
如何找到允许我保存到的文件夹? 当然,这段代码在模拟器中运行良好,所以我假设我遗漏了一些不太明显的东西。
BR 弗雷德里克
我认为您的问题是 Apple Watch 扩展程序无法将文件保存到其文档目录。我能够使用应用程序组保存文件。将应用程序组添加到您的权利,然后您应该能够写入以下目录:
let path = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.my.cool.watch.app")