Intereting Posts
Трафик не отображается с пользовательскими плитками – карты Google iOS iOS: отправка SMS iOS Swift Display Xcassets Image в WebView Одновременное воспроизведение и сохранение фильма Скопировать часть строки в другую строку Ответ NSURLConnection sendSynchronousRequest равен нулю при недействительных учетных данных Bootstrap 3 модальный в navbar, не ссылка не кликабельна в ios Загружайте файлы с AFNetworking, проверяйте обновления (Etag, последний раз редактировалось) Есть ли способ перехватить stdout в swift? Как скрыть панель состояния AVPlayerViewController? Как удалить значки на значок трамплина при возобновлении приложения? Не удается получить уведомление в моем iphone4s от симулятора Как добавить границы или изображения в мои маршруты маршрута MapKit? iOS не удалось обновить событие календаря при синхронизации для обмена аккаунтом Настройки URL-адреса iOS в iOS 10.0 SDK

iOS / Swift – доступ к общей БД с помощью групп приложений

Я использую возможности групп приложений для совместного использования SQLite DB между двумя приложениями.

Теперь я хочу перейти на Swift из Objective-C.

Чтобы получить путь к БД , в Objective-C я

NSFileManager *fileMgr = [NSFileManager defaultManager]; NSURL *groupContainerURL = [fileMgr containerURLForSecurityApplicationGroupIdentifier:@"<APP_GROUPS_ID>"]; NSString *groupContainerString = [groupContainerURL path]; NSString *sharedDB = [groupContainerString stringByAppendingPathComponent:dbFilename]; const char *dbPath = [sharedDB UTF8String]; 

и это работает.

В Swift я пробовал этот путь

 let groupContainerURL = fileMgr!.containerURL(forSecurityApplicationGroupIdentifier: "<APP_GROUPS_ID>") let groupContainerString = groupContainerURL.path pathToDatabase = groupContainerString.appending(databaseFileName) 

и я также заявил

 let databaseFileName = "<DB_NAME>" var pathToDatabase: String! var fileMgr : FileManager! 

Но у меня есть эта ошибка, о необязательном значении

 fatal error: unexpectedly found nil while unwrapping an Optional value 2017-07-24 11:25:09.086974 CatchTheData[7941:4022839] fatal error: unexpectedly found nil while unwrapping an Optional value 

в начале.

Где я не прав?

Runtime exception : unexpectedly found nil while unwrapping an Optional value :

  1. когда вы unwrap an optional которая содержит nil OR
  2. когда вы используете implicitly unwrapped optional не присваивая ей значение.

В следующих строках:

 var pathToDatabase: String! var fileMgr : FileManager! 

убедитесь, что вы присвоили значение pathToDatabase и fileMgr перед их использованием. Поскольку эти 2 переменные являются implicitly unwrapped optionals , так что, если вы используете их без назначения значений, это приведет к runtime exception во runtime exception аналогичному unexpectedly found nil while unwrapping an Optional value.

 let groupContainerURL = fileMgr!.containerURL(forSecurityApplicationGroupIdentifier: "<APP_GROUPS_ID>") 

В приведенной выше строке кода вы используете fileMgr! , Прежде всего, не нужно разворачивать его. Он implicitly unwrapped . Просто убедитесь, что fileMgr имеет значение, чтобы приложение не fileMgr .

 let databaseFileName = "<DB_NAME>" var pathToDatabase: String! var fileMgr : FileManager? //Your code crashes coz you hv declared fileMgr as non-optional but you hv'nt initialized it. let AppGroupContainerUrl = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "<APP_GROUPS_ID>") if let groupContainerURL = AppGroupContainerUrl{ let groupContainerString = groupContainerURL.path pathToDatabase = groupContainerString.appending(databaseFileName) }