Swift - Пользовательский класс для XP C не загружается - PullRequest
0 голосов
/ 20 марта 2020

У меня есть класс 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?

...