保存到watchOS 2文档文件夹

5

我的iOS应用程序将数据库发送到WatchKit(watchOS 2)。在WatchKit中,我使用以下代码获取手表文档文件夹以保存新文件:

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 "文件“MyDatabase.sqlite”无法保存在文件夹“文档”中。" Error Domain=NSCocoaErrorDomain Code=513 "您没有权限保存文件“MyDatabase.sqlite”。
我该如何找到可以保存的文件夹?当然,在模拟器中这段代码运行良好,因此我认为我可能遗漏了一些不太明显的东西。
敬礼, Frederik

你不应该使用NSFileManager移动Core Data文件,而应该使用NSPersistentStoreCoordinator。使用NSFileManager移动文件可能会损坏你的数据库。 - I make my mark
1个回答

2

我相信您的问题是苹果手表扩展无法将文件保存到其文档目录中。我能够通过使用应用程序组来保存文件。在你的授权中添加一个应用程序组,然后你就可以写入以下目录:

let path = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.my.cool.watch.app")

这在iOS 11及以上版本中不起作用。请使用类似FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first的东西代替。 - Teo Sartori

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接