1

У меня есть NSDictionary, содержащий некоторые объекты: NSSet UITouches, UIEvent и NSString.Ошибка при кодировании UITouchesEvent as NSData

Когда я пытаюсь закодировать словарь в NSData, строка кодируется правильно. У меня была ошибка с кодировкой UITouches, но я нашел способ расширить класс с помощью некоторого кода, чтобы можно было кодировать 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 

Пожалуйста, дайте мне знать, если я пропускаю какие-либо важную информацию относительно отладки. Благодаря!

ответ

1

Вы должны иметь UITouch или UITouchesEvent адаптировать протокол UICoding. Это означает, что он должен поддерживать следующие методы:

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

Я не пробовал это сам, но он должен работать, если вы делаете это в категории класса. Трудность состоит в том, чтобы выяснить, что вам нужно кодировать, чтобы его можно было снова декодировать в правильный экземпляр, если это то, что вам нужно.

+0

Спасибо, но, как я уже сказал, у меня уже есть кодировка UITouch. Я пытаюсь понять, как это сделать с помощью UITouchesEvent. – rsmoz

+0

Мой плохой, тогда, конечно, вам придется сделать это для класса 'UITouchesEvent'. Но я не думаю, что это будет легко. – Pascal