Intereting Posts
Переслать события касания в другое представление, которое частично покрывается тем, которое получило событие Почему многострочный UILabel с выравниванием строк удаляет 3 точки в конце? Как нажать кнопку, лежащую ниже UITableView iPhone Force Настройка внешнего разрешения экрана Кнопки навигационной панели iOS Swift Shift Down Как использовать kCICategoryDistortionEffect и kCICategoryGeometryAdjustment в iOS? как использовать AQRecorder из примера почему нет ленивого экземпляра, используемого в каждом геттере Анимация альфа UIView в последовательности с UIViewPropertyAnimator Протоколированное программирование и класс Swift React Native: как изменить представление на событие onPress Как программно добавить несколько UIViewControllers в UIScrollView Перезагрузка перезагрузки Дополнительный вид (заголовок) UICollectionView с invalidationContext Сбой при попытке представить UIImagePickerController модально на iPhone Как удалить UIImageView из UIScrollView в iOS 6

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) }