首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MKPlacemark和NSCoder在iOS 4对iOS 5

MKPlacemark和NSCoder在iOS 4对iOS 5
EN

Stack Overflow用户
提问于 2012-03-09 17:48:06
回答 1查看 464关注 0票数 0

在iOS 4中,MKPlacemark不符合NSCoding

在iOS 5中,MKPlacemark通过CLPlacemark符合NSCoding

我不确定我是否可以在我自己的键/值(地址簿之外)中使用-initWithCoordinate:addressDictionary:,而不需要使用它,但我真正好奇的是NSCoding

特别是,假设我对MKPlacemark进行了子类化。如果我想支持NSCoding,我想调用超类,只要它符合。

有趣的是,-conformsToProtocol:在iOS 5和iOS 4上返回YES

在iOS 4上,即使我检查超类是否响应于-encodeWithCoder: (我更喜欢检查协议,但是不管怎么说)。“哦,我是不是说我们遵从并回应了那个选择者?哦!是的。不。”(.)

我不想在这里检查操作系统版本,但是,如果我想在这两种情况下返回YES .(颤抖)。

EN

回答 1

Stack Overflow用户

发布于 2012-03-10 02:31:17

我认为,至少就目前而言,最好的做法是遵循以下方针:

代码语言:javascript
复制
- (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,但是我无法摆脱检查协议和类的愿望。让我们听听二分法吧!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9638645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档