2015-04-25 2 views
1

Я не увенчался успехом в получении основных данных для работы с виджетами приложения и сегодня на моем устройстве.ios8 Основные данные iCloud Сегодня Виджет не синхронизирует

let url = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.mygroup.name").URLByAppendingPathComponent("fileName.sqllite") 
var error: NSError? = nil 
let options = [NSMigratePersistentStoresAutomaticallyOption: true, 
      NSInferMappingModelAutomaticallyOption: true,NSPersistentStoreUbiquitousContentNameKey:"SharedContainerName" 
     ]   
let s = coordinator?.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: options 
      , error: &error) 

Я добавил контейнер группы, который я использую для URL-адресов магазинов. Я заметил на симуляторах, что мой постоянный координатор указывает на один и тот же файл sqlite

(URL: file: /// Пользователи/xxxx/Библиотека/Разработчик/CoreSimulator/Devices/6Cxxxxxx/data/Контейнеры/Общие/AppGroup/E65xxxxxx/fileName.sqllite))

Это, похоже, отлично работает на симуляторе, и я могу хранить данные в своем основном приложении и получать его в сегодняшнем виджетах. Когда я запускаю код на своем устройстве, файлы находятся в разных местах, а базы данных не синхронизируются (данных о виджетах сегодня нет).

My Main App

(URL: файл /// частный/вар/мобильный/Контейнеры/Shared/AppGroup/2CCXXX/CoreDataUbiquitySupport/мобильный ~ F74XXX/SharedContainerName/0E8XXXX /store/fileName.sqllite))

Сегодня Widget

(URL: файл /// частный/вар/мобильный/Контейнеры/Shared/AppGroup/2CCXXX/CoreDataUbiquitySupport/мобильный ~ F74XXX/SharedContainerName/2FBYYYY/магазин/имя_файла. sqllite))

Я предполагаю, что это должно быть хорошо, поскольку они должны быть синхронизированы iCloud. Виджет работает отлично, однако он не имеет данных (например, он не синхронизирован). Теперь отладка этого была сложной задачей, так как я не могу получить консольный вывод при запуске сегодняшнего виджета. Когда я запускаю виджет из Xcode, а не прикрепляюсь к запущенному процессу (единственный способ получить любой вывод на консоли), я получаю данные ядра ядра iCloud: Ошибка: первоначальное уведомление о синхронизации возвратило ошибку BRCloudDocsErrorDomain 12. Я получаю нет уведомлений. Может быть, iCloud и Core Data не работают в это время с помощью сегодняшнего виджета? Основной код данных в моем приложении и расширении идентичны, поэтому я не думаю, что у меня есть ошибка.

ответ

1

Согласно this Apple Developer Forum message от сотрудника Apple:

None of iCloud is accessible from within an Extension in iOS 8.0

и добавляет он в другом сообщении:

Document syncing, I should clarify, or anything which requires file coordination. I'm not sure about KVS or CloudKit

Рекомендация выставить состояние приложения для расширения с использованием другого метода (PLIST, отдельные файлы и т. д.), что немного облом.

+1

Спасибо! Я так рад, что сдался, пытаясь заставить его работать. Я использовал работу, если кто-то заинтересован (ну может быть, взломать). В моем основном приложении я сохраняю полный URL-адрес хранилища iCloud (когда он включен) в настройках пользователя по умолчанию, используя контейнер группы. Затем я проверяю, существует ли это в моем расширении. Если я открываю его, прочитайте его, как если бы это был не icloud-хранилище (без NSPersistentStoreUbiquitousContentNameKey), в противном случае он остался бы в хранилище без iCloud. Расширению требуется только чтение данных, так что это работает для меня. Если основное приложение обновляет базу данных, я просто уведомляю о расширении через userdefaults. – user3731583

+0

Это довольно умно. Я немного удивлен, что расширение имеет доступ к контейнеру повсеместности. Я выкрикнул и просто написал планку подмножества данных, которое мне нужно было отображать в расширении. –

+0

Я столкнулся с одной и той же проблемой, но во время тестирования я могу отправлять новые данные на другое устройство из виджета iOS сегодня как для хранения ключей, так и для основных данных (только для проверки совместимости с OS X для моего приложения iOS) –

Смежные вопросы