Вариант использования моего приложения: пользовательский интерфейс входа в систему, который обрабатывается в SafariExtensionViewController.xib
, и когда пользователь нажимает кнопку входа в систему, должен отображаться другой пользовательский интерфейс, который равен ExtensionStepsViewController.xib
. Я использовал следующее для перехода на другой экран
self.presentViewControllerAsSheet(ExtensionStepsViewController())
Однако я получаю следующую проблему
- Ошибка подтверждения в void assertRunningOnAppKitThread (void) (), 2018-09-05 15: 02: 30.318742 + 0545 расширение [13150: 1422110]
[Общие] не работает в AppKit (основной) поток
Вот мой код
SafariExtensionViewController.swift
import SafariServices
class SafariExtensionViewController: SFSafariExtensionViewController {
@IBOutlet weak var passwordMessage: NSTextField!
@IBOutlet weak var emailMessage: NSTextField!
@IBOutlet weak var message: NSTextField!
@IBOutlet weak var email: NSTextField!
@IBOutlet weak var password: NSSecureTextField!
static let shared = SafariExtensionViewController()
override func viewDidLoad() {
message.stringValue = ""
emailMessage.stringValue = ""
passwordMessage.stringValue = ""
}
@IBAction func userLogin(_ sender: Any) {
let providedEmailAddress = email.stringValue
let providedPassword = password.stringValue
let isEmailAddressValid = isValidEmailAddress(emailAddressString: providedEmailAddress)
self.message.stringValue = ""
emailMessage.stringValue = ""
passwordMessage.stringValue = ""
if isEmailAddressValid && providedPassword.count > 0 {
let session = URLSession.shared
var request = URLRequest(url: URI!)
request.httpMethod = "POST"
do {
request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted)
} catch let error {
print(error.localizedDescription)
}
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in
guard error == nil else {
return
}
guard let data = data else {
return
}
do {
//create json object from data
if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {
if let httpResponse = response as? HTTPURLResponse {
if (httpResponse.statusCode >= 200 && httpResponse.statusCode < 300) {
print("#########LOGIN########################")
self.message.stringValue = "Login Successful"
self.message.textColor = NSColor.green
UserDefaults.standard.set(providedEmailAddress, forKey: "email")
self.presentViewControllerAsSheet(ExtensionStepsViewController()) // error is thrown after this action
} else {
self.message.stringValue = "Invalid Credentials"
self.message.textColor = NSColor.red
}
}
// handle json...
}
} catch let error {
print(error.localizedDescription)
}
})
task.resume()
} else {
emailMessage.textColor = NSColor.red
emailMessage.stringValue = "Invalid Email"
}
}
}
ExtensionStepsViewController.swift
import SafariServices
class ExtensionStepsViewController: SFSafariExtensionViewController {
// static let shared = SafariExtensionViewController()
override func viewDidLoad() {
super.viewDidLoad()
print("Hello") // this is also printed
// Do view setup here.
}
}
при успешном входе в систему и выполнении этого оператора self.presentViewControllerAsSheet(ExtensionStepsViewController())
print("hello")
печатается в разделе отладки, и я получаю перечисленную проблему.