Этот декодер будет декодировать только те классы, которые принимают NSSecureCoding

Из AppDelegate я называю это:

-(void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void (^)(NSDictionary *))reply{

    [SavedSearchesHack getAllMatches:^(MatchCollection * _Nonnull matchCollection) {
        reply(@{@"response" : matchCollection});
    }];
}

И тогда я получаю эту ошибку при вызове ответа:

*** Завершение работы приложения из-за необработанного исключения "NSInvalidUnarchiveOperationException", причина: "Этот декодер будет декодировать только те классы, которые принимают NSSecureCoding. Класс Test.MatchCollection не принимает его.

    public class func openParentApplication(userInfo: [NSObject : AnyObject], 
    reply: (([NSObject : AnyObject], NSError?) -> Void)?) -> Bool

Пока я возвращаю просто объекты типа "test" вместо MatchCollection, я не получаю ошибок.

2 ответа

Добавить в .h файл

 // just the protocol

@interface PacketH: NSObject<NSSecureCoding>

добавить в .m файл

+ (BOOL)supportsSecureCoding {
   return YES;
}

Если вы используете Swift, вам нужно реализовать NSSecureCodingпротокол к вашему классу:

      class Foo: NSObject, NSSecureCoding {
    static var supportsSecureCoding: Bool {
       return true
    }
}
Другие вопросы по тегам