1

いくつかのオブジェクトを含むNSDictionaryがあります:UITouchesのNSSet、UIEvent、およびNSString。

辞書をNSDataにエンコードしようとすると、文字列は正しくエンコードされます。UITouchのエンコードでエラーが発生しましたが、UITouchをエンコードできるように、コードを使用してクラスを拡張する方法を見つけました。ただし、UIEvent(実際にはUITouchesEvent)をエンコードすることはできません。UIEventまたはUIInternalEventを拡張して、NSDataにエンコードできるようにするにはどうすればよいですか?

エンコード/デコードに使用する方法:

-(NSString *)stringFromDictionary:(NSDictionary *)dict{
    NSMutableData *data = [[NSMutableData alloc] init];
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    [archiver encodeObject:dict forKey:@"dictKey"];
    [archiver finishEncoding];

    return [Base64 encode:data];
}

-(NSDictionary *)dictionaryFromString:(NSString *)string{
    NSData *data = [[NSMutableData alloc] initWithData:[Base64 decode:string]];
    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
    NSDictionary *myDictionary = [unarchiver decodeObjectForKey:@"dictKey"];
    [unarchiver finishDecoding];
    return myDictionary;

}

私が得るエラー:

-[UITouchesEvent encodeWithCoder:]: unrecognized selector sent to instance

デバッグに関する重要な情報が不足している場合はお知らせください。ありがとう!

4

1 に答える 1

1

UICodingプロトコルを持っているUITouchUITouchesEvent適応させる必要があります。これは、次のメソッドをサポートする必要があることを意味します。

- (id)initWithCoder:(NSCoder *)decoder;
- (void)encodeWithCoder:(NSCoder *)encoder;

私はこれを自分で試したことはありませんが、クラスのカテゴリでこれを行うとうまくいくはずです。難しいのは、エンコードする必要があるものを見つけて、それが必要な場合に、正しいインスタンスに再度デコードできるようにすることです。

于 2013-02-09T04:00:33.657 に答える