2016-12-19 11 views
-2
NSCoder *coder; 
coder=[[NSCoder alloc]init]; 
[coder encodeObject:@"value" forKey:@"frame"]; 

エラー

キャッチされない例外により 'NSInvalidArgumentException' にアプリを終了、理由:「*** -encodeObject:forKey:クラスNSCoderの抽象オブジェクトに送信することはできません:コンクリートのインスタンスを作成します `NScoder Objective-Cのランタイム


これは、すべてのボディtime.can実行中に壊れる私が間違っているの何それを見つけるために私を助けて!?

+0

を実装する必要があります。 –

+0

キャッチされていない例外 'NSInvalidArgumentException'のためアプリケーションを終了する理由: '*** -encodeObject:forKey:NSCoderクラスの抽象オブジェクトに送信できません:具体的なインスタンスを作成してください!' –

+2

'NSCoder'のドキュメンテーションの最初の一文字を読むことは役に立ちます。 – Willeke

答えて

-2

はモデルクラスを作成する必要があり、このモデルクラスでは、あなたが正確に何が起こるかを教えていない限り、いや、我々は助けることができない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"]; 
} 
+0

これは著者の問題とは関係ありません。また、データをエンコードするために必ずしもモデルクラスが必要なわけではありません。トップレベルで必要なものをエンコードすることができます。 –