У меня есть класс Person
, определенный ниже, который я пытаюсь передать методу через соединение XP C. Мой класс выглядит следующим образом:
@objc public class Person: NSObject, NSSecureCoding {
public static var supportsSecureCoding: Bool {
return true
}
public var firstName: String
public var lastName: String
public var age: Int32
public var weight: Int32
public required init?(coder: NSCoder) {
self.firstName = coder.decodeObject(of: [NSString.self], forKey: "firstNameKey") as! String
self.lastName = coder.decodeObject(of: [NSString.self], forKey: "lastNameKey") as! String
self.age = coder.decodeInt32(forKey: "ageKey")
self.weight = coder.decodeInt32(forKey: "weightKey")
}
public init(firstName: String, lastName: String, age: Int32, weight: Int32) {
self.firstName = firstName
self.lastName = lastName
self.age = age
self.weight = weight
}
public func encode(with coder: NSCoder) {
coder.encode(firstName, forKey: "firstNameKey")
coder.encode(lastName, forKey: "lastNameKey")
coder.encode(age, forKey: "ageKey")
coder.encode(weight, forKey: "weightKey")
}
}
Я использую следующий протокол:
@objc public protocol XPCProtocol {
@objc func handlePerson(_ person: Person)
}
Я пытаюсь вызвать handlePerson
следующим образом:
let person = Person(firstName: "John", lastName: "Doe", age: 45, weight: 180)
proxy.handlePerson(person)
Но я получаю сообщение об ошибке, что мой Person
класс не загружается, когда я пытаюсь вызвать handlePerson
:
2020-03-20 12:37:31.840163-0600 TestApp[3451:66436] [xpc.exceptions] <NSXPCConnection: 0x600003010000> connection to service on pid 3457 named ABCDEFGH.com.my.test.bundle.xpc: Exception caught during decoding of received selector handlePerson:, dropping incoming message.
Exception: Exception while decoding argument 0 (#2 of invocation):
Exception: decodeObjectForKey: class "MyModule.Person" not loaded or does not exist
Этот человек и этот человек * У 1020 *, похоже, были похожие проблемы, которые были решены путем изменения сигнатуры класса на @objc(Person) public class Person
, но в моем случае я получаю то же сообщение об ошибке, но не могу найти Person
вместо MyModule.Person
.
Как я могу решить эту проблему, чтобы передать свой пользовательский объект поверх XP C?