【问题标题】:NScoder objective-c run timeNScoder Objective-C 运行时间
【发布时间】:2016-12-19 01:57:12
【问题描述】:
NSCoder *coder; 
coder=[[NSCoder alloc]init];
[coder encodeObject:@"value" forKey:@"frame"];

错误

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** -encodeObject:forKey: cannot be sent to an abstract object of class NSCoder: Create a 具体实例!`


这会在运行时中断。任何机构都可以帮我找出我做错了什么吗?

【问题讨论】:

  • 除非你告诉我们到底发生了什么,否则我们无能为力。
  • 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** -encodeObject:forKey: 无法发送到 NSCoder 类的抽象对象:创建具体实例!”
  • 阅读NSCoder 文档的第一行可能会有所帮助。
  • 根据错误信息,NSCoder 不能直接使用;相反,请使用像 NSKeyedArchiver 这样的具体子类来进行归档。

标签: objective-c nscoder


【解决方案1】:

需要创建一个模型类,并且在这个模型类中,需要实现一个NSCodingProtocol

例如书籍类

Book.h

@interface Book : NSObject<NSCoding>

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *author;

@end

Book.m

- (id)initWithCoder:(NSCoder *)aDecoder {
    if (self = [super init]) {
        self.title = [aDecoder decodeObjectForKey:@"name"];
        self.author = [aDecoder decodeObjectForKey:@author"];
    }
    return self;
}

- (void)encodeWithCoder:(NSCoder *)aCoder {
    [aCoder encodeObject:_name forKey:@"name"];
    [aCoder encodeObject:_author forKey:@"author"];
}

【讨论】:

  • 这与作者的问题无关。您也不一定需要模型类来编码数据;你可以在顶层编码任何你想要的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
相关资源
最近更新 更多