2015-10-02 3 views
3

Приложение MyOS отправляет базу данных в WatchKit (watchOS 2). В WatchKit я использую следующий код, чтобы получить папку часов документа, чтобы сохранить новый файл в:Сохранение в watchOS 2 папке с документами

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]; 

Он выдает ошибку, говоря:

Ошибка домена = NSCocoaErrorDomain Code = 512 «Файл« MyDatabase.sqlite »не может быть сохранен в папке« Документы ».» Error Domain = NSCocoaErrorDomain Code = 513 «У вас нет разрешения на сохранение файла„MyDatabase.sqlite“

Как я могу найти папку, я позволила сохранить? Естественно этот код работал отлично в тренажере поэтому я предполагаю, что я что-то не слишком очевидное отсутствует.

BR Frederik

+0

Вам не следует перемещать файлы основных данных с помощью NSFileManager для этого используется NSPsistentStoreCoordinator. Перемещение файла с помощью NSFileManager может привести к повреждению базы данных. –

ответ

1

Я считаю, что ваша проблема в том, что расширение яблока смотреть не может сохранять файлы в свои документы реж. Я был в состоянии спасти файлов с помощью групп приложений. Добавьте группу приложений в свои права, а затем вы сможете o пишите в следующую директорию:

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

Это не работает в> = iOS 11. Используйте что-то вроде 'FileManager.default.urls (для: .applicationSupportDirectory, в: .userDomainMask). Вместо этого. –