xcode – 编写针对iOS 6 Base SDK编译的iOS7代码

栏目: IOS · 发布时间: 7年前

内容简介:翻译自:https://stackoverflow.com/questions/18303786/writing-ios7-code-that-compiles-against-ios-6-base-sdk

我们现在有一个iOS应用程序在售,我们正在使用相同的代码库在XCode 5 DP上开发iOS 7版本.

我们现在真的需要为现有的iOS 5/6客户发布更新,当然,当我们将项目重新加载到XCode 4时,它会抱怨不存在的属性,因为Base SDK然后变为iOS6而不是7:

// Only run this bit on iOS 7
if ([self respondsToSelector:@selector(setFooForExtendedLayout:)])
{
    self.fooForExtendedLayout = UIFooEdgeLeft | UIFooEdgeRight;
}

float bottomOffset = 0;
// Only run this bit on iOS 7, else leave bottomOffset as 0
if ([self.hostController respondsToSelector:@selector(bottomLayoutFoo)])
    bottomOffset = self.hostController.bottomLayoutFoo.length;

(为避免破坏NDA而混淆)

XCode错误:

Property ‘fooForExtendedLayout’ not found on object of type  ‘UIViewController *’
Use of undeclared identifier ‘UIFooEdgeLeft’
Use of undeclared identifier ‘UIFooEdgeRight’
Property ‘bottomLayoutFoo’ not found on object of type ‘UIViewController *’

评论这个新代码会很痛苦.重新编写它以与新旧Base SDK兼容的正确方法是什么,现在提交它(通过XCode 4并针对iOS 6 SDK构建)会冒任何类型的App Store拒绝风险?

我建议等到iOS 7准备好提交您的更新.

但是,它们是解决问题的方法.

Property ‘fooForExtendedLayout’ not found on object of type  ‘UIViewController *’

由于属性只是一种语法糖,修复此类错误的简单方法是使用选择器来调用方法(setter):

[ self performSelector: NSSelectorFromString( "setFooForExtendedLayout:" ) withObject: ( id )xxx ];

@selector()无法使用,因为您要求使用iOS 6 SDK的iOS 7选择器.

因此使用NSSelectorFromString.

withObject参数是为对象创建的,顾名思义.但是由于对象是指针,并且因为你的方法采用枚举值,你可以使用强制转换实际传递它而没有问题.

Use of undeclared identifier ‘UIFooEdgeLeft’  Use of undeclared identifier ‘UIFooEdgeRight’

现在关于你的枚举值,没有这样的技巧.

唯一的方法是使用与iOS 7 SDK中相同的值声明它们,并祈祷它在官方发布之前不会更改.

所以现在由你决定……就个人而言,我会等待.

翻译自:https://stackoverflow.com/questions/18303786/writing-ios7-code-that-compiles-against-ios-6-base-sdk


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

智能主义

智能主义

周鸿祎 / 中信出版集团股份有限公司 / 2016-11-1 / CNY 49.00

大数据和人工智能迅猛发展,对社会和商业的影响日益深刻,从学术界到企业界,智能化时代必将来临,已经成为共识。而此次变革,将会开启新一轮的发展浪潮。企业家、互联网以及传统企业、个人,应当如何理解这一轮的发展,如何行动以抓住智能化所带来的众多机遇,成为所有人持之以恒的关注热点。 周鸿祎作为最具洞察力的互联网老兵、人工智能领域成功的先行者,通过总结360公司的战略布局、产品规划、方法论实践,从思想到......一起来看看 《智能主义》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

在线进制转换器
在线进制转换器

各进制数互转换器