内容简介:翻译自: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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 编写 MSBuild 内联编译任务(Task)用于获取当前编译环境下的所有编译目标(Target)
- MSBuild 在编写编译任务的时候判断当前是否在 Visual Studio 中编译
- Linux 环境下 gcc 链接库 编译、链接(概览) 以及 自动化工具Makefile的编写
- 在项目文件 / MSBuild / NuGet 包中编写扩展编译的时候,正确使用 props 文件和 targets 文件
- 基于顺丰同城接口编写sdk,java三方sdk编写思路
- 使用 Clojure 编写 OpenWhisk 操作,第 1 部分: 使用 Lisp 方言为 OpenWhisk 编写简明的代码
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。