这个解码器只会解码采用 NSSecureCoding 的类

Posted

技术标签:

【中文标题】这个解码器只会解码采用 NSSecureCoding 的类【英文标题】:This decoder will only decode classes that adopt NSSecureCoding 【发布时间】:2016-07-26 11:50:31 【问题描述】:

从 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,我就不会出错。

【问题讨论】:

Parse and watchkit extension的可能重复 你读过并尝试过Parse and watch kit extension和When to use NSSecureCoding 通常,您可以使用来自此答案的技术:***.com/a/68522427/10601702 解码仅遵循 NSCoding 而不是 NSSecureCoding 的对象。 (但不适用于这个问题,因为他们似乎无法控制如何他们的数据被解码) 【参考方案1】:

添加.h文件

 // just the protocol

@interface PacketH: NSObject<NSSecureCoding>

添加.m文件

+ (BOOL)supportsSecureCoding 
   return YES;

【讨论】:

【参考方案2】:

如果你使用Swift,你需要为你的类实现NSSecureCoding协议:

class Foo: NSObject, NSSecureCoding 
    static var supportsSecureCoding: Bool 
       return true
    

【讨论】:

以上是关于这个解码器只会解码采用 NSSecureCoding 的类的主要内容,如果未能解决你的问题,请参考以下文章

Netty学习-LengthFieldBasedFrameDecoder解码器

解码 UTF8 电子邮件标头

DALI解码模块

通过使用 Alamofire 和解码获取 JSON - Swift 4

QT软件开发-基于FFMPEG设计视频播放器-支持软解与硬解

iOS 视频硬解码