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

您必须拥有UITouchUITouchesEvent适应UICoding协议。这意味着它必须支持这些方法:

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

我自己没有尝试过,但是如果您在班级类别中这样做,它应该可以工作。困难在于找出您需要编码的内容,以便可以再次将其解码为正确的实例,如果这是您需要的话。

于 2013-02-09T04:00:33.657 回答