Запуск команд в основном приложении из общего ресурса - PullRequest
0 голосов
/ 29 января 2019

У меня есть приложение и расширение для общего доступа.Расширение запускается на странице arXiv, например this .Затем он извлекает некоторую информацию, включая URL-адрес PDF, и должен сообщить основному приложению о необходимости сохранения данных.

Вот что происходит сейчас:

  1. Данные извлекаются и помещаются в разныепеременные.
  2. Создается объект Realm, в котором я сохраняю метаданные для бумаги.
  3. Диск используется для сохранения файла PDF.

Из того, что я прочитал , я не могу совместно использовать базу данных областей и должен синхронизировать две области.Кроме того, запись файла в общий контейнер кажется ненужной.Поэтому вместо этого я хочу, чтобы приложение share сообщало основному приложению о выполнении команды, которая завершит шаги 2 и 3. В основном приложении.

Вот код, который я написал для 3 шагов:

override func didSelectPost() {
        var parameters: [String: String] = [:]
        let extensionItem = extensionContext?.inputItems.first as! NSExtensionItem
        let itemProvider = extensionItem.attachments?.first as! NSItemProvider
        let propertyList = String(kUTTypePropertyList)
        if itemProvider.hasItemConformingToTypeIdentifier(propertyList) {
            itemProvider.loadItem(forTypeIdentifier: propertyList, options: nil, completionHandler: { (item, error) -> Void in
                guard let dictionary = item as? NSDictionary else { return }
                OperationQueue.main.addOperation {
                    if let results = dictionary[NSExtensionJavaScriptPreprocessingResultsKey] as? NSDictionary,
                        let urlString = results["URL"] as? String,
                        let pdfString = results["PDF"] as? String,
                        let title = results["title"] as? String,
                        let authors = results["authors"] as? String,
                        let abstract = results["abstract"] as? String,
                        let year = results["year"] as? String,
                        let subjects = results["subjects"] as? String,
                        let url = URL(string: urlString) {
                        print("URL retrieved: \(urlString)")
                        print("PDF retrieved: \(pdfString)")
                        print("Title retrieved: \(title)")
                        print("Authors retrieved: \(authors)")
                        print("Abstract retrieved: \(abstract)")
                        print("Year retrieved: \(year)")
                        print("Subjects retrieved: \(subjects)")
                        // TODO: Save the file to a folder, and save the meta-data to the model

                        let realm = try! Realm()
                        let article = Article()
                        article.title = title
                        article.url = urlString
                        let ppath = String(urlString.suffix(from: String.Index.init(encodedOffset: 22)))
                        article.pdfPath = ppath
                        article.authors = authors
                        article.subjects = subjects
                        article.year = year
                        article.abstract = abstract

                        try! realm.write {
                            realm.add(article, update: true)
                        }

                        do {
                            let pdfURL = URL(string: pdfString)
                            let pdfData = try Data(contentsOf: pdfURL!)
                            let fileName = String(urlString.suffix(from: String.Index.init(encodedOffset: 22)))
                            try Disk.save(pdfData, to: .documents, as: "\(fileName).pdf")
                        } catch {
                            print("Error")
                        } 
                        print("Everything went fine.")

                    }
                }
            })
        } else {
            print("error")
        }
    }

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

Я довольно долго искал расширение Share, но документация Apple находится в Objective C, а остальные учебные пособия не охватываютмой случай.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...