在iOS 4中,MKPlacemark不符合NSCoding。
在iOS 5中,MKPlacemark通过CLPlacemark符合NSCoding。
我不确定我是否可以在我自己的键/值(地址簿之外)中使用-initWithCoordinate:addressDictionary:,而不需要使用它,但我真正好奇的是NSCoding。
特别是,假设我对MKPlacemark进行了子类化。如果我想支持NSCoding,我想调用超类,只要它符合。
有趣的是,-conformsToProtocol:在iOS 5和iOS 4上返回YES!
在iOS 4上,即使我检查超类是否响应于-encodeWithCoder: (我更喜欢检查协议,但是不管怎么说)。“哦,我是不是说我们遵从并回应了那个选择者?哦!是的。不。”(.)
我不想在这里检查操作系统版本,但是,如果我想在这两种情况下返回YES .(颤抖)。
发布于 2012-03-10 02:31:17
我认为,至少就目前而言,最好的做法是遵循以下方针:
- (id)initWithCoder:(NSCoder *)aDecoder {
if ([super conformsToProtocol:@protocol(NSCoding)] &&
[super isKindOfClass:[CLPlacemark class]]) {
[super initWithCoder:aDecoder];
} else {
// Homegrown MKPlacemark (ostensibly iOS 4.x) initWithCoder
}
// Subclass-specific initWithCoder
}
- (void)encodeWithCoder:(NSCoder *)aCoder {
if ([super conformsToProtocol:@protocol(NSCoding)] &&
[super isKindOfClass:[CLPlacemark class]]) {
[super encodeWithCoder:aCoder];
} else {
// Homegrown MKPlacemark (ostensibly iOS 4.x) encodeWithCoder
}
// Subclass-specific encodeWithCoder
}我认为这是多余的,因为CLPlacemark处理NSCoding,但是我无法摆脱检查协议和类的愿望。让我们听听二分法吧!
https://stackoverflow.com/questions/9638645
复制相似问题