这个解码器只会解码采用 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解码器
通过使用 Alamofire 和解码获取 JSON - Swift 4