关于31天App教程示例中一些因SDK版本而出现的问题(转)

由于国外那个知名的31天案例教程比较老,所用官方API是2008年时的2.X,所以在现在的Xcode3-4之后或多或少都有编译警告和错误信息。必须做些适应iOS版本的代码更改才能顺利编译通过。

Day1:Minutes to Midnight

NSDate* now = [NSDate date];int hour = 23 - [[now dateWithCalendarFormat:nil timeZone:nil] hourOfDay];int min = 59 - [[now dateWithCalendarFormat:nil timeZone:nil] minuteOfHour];int sec = 59 - [[now dateWithCalendarFormat:nil timeZone:nil] secondOfMinute];

这里dateWithCalendarFormat:在官方API 2.2.1以后,就会有警告错误。在Xcode3.X及其以后版本中,都要进行如下修改才能编译通过:

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDate *date = [NSDate date];
NSDateComponents *comps = [calendar components:unitFlags fromDate:date];
int hour = 23 - [comps hour];
int min = 59 - [comps minute];
int sec = 59 - [comps second];

Day3: openURL
语句:NSLog(urlText); 产生警告错误: format string is not a string literal (potentially insecure)
修改为:NSLog(@"%@",urlText);
当然这句不变,NSString *urlText = [NSString stringWithFormat:@"http://maps.google.com.hk/maps?q=%@",addressText];

Day4: What is My IP
对于获取iphone本机ip地址,在iphone ios2.X上都可以用示例代码中的方法调用获得:

NSHost  *myhost = [NSHost  currentHost];

NSString *ad = [myhost  address];

但是到ios 3.0后这些方法成了苹果私有API了,在编译时会报找不到此方法声明的错误,使用私有API其提交的app也要被reject。因此,建议使用网络上的 一个自定义获取ip地址的类文件。相关文件是:IPAddress.h (http://iphonesdksnippets.com/post/2009/09/07/Get-IP-address-of-iPhone.aspx)

转载:http://www.cnblogs.com/lovecode/archive/2011/12/11/2283914.html

时间: 2024-11-05 12:23:05

关于31天App教程示例中一些因SDK版本而出现的问题(转)的相关文章

HBuilder开发App教程08-几种页面打开方式

说明 上节说了list页面的实现,其中关于几种页面的打开方式没有详细述说, 本节详细述说下几种页面打开方式的区别. 几种打开页面的方式 1.初始化时创建子页面 2.直接打开新页面 3.预加载页面 示例 1.初始化时创建子页面 mui.init({ subpages: [{ url: your - subpage - url, //子页面HTML地址,支持本地地址和网络地址 id: your - subpage - id, //子页面标志 styles: { top: subpage - top

HBuilder开发App教程02-环境搭建,HelloWorld以及真机调试

环境搭建 前言 用HBuilder做开发,其实可以说是最简单的一种环境搭建了,甚至可以说没有环境需要搭建, 想想android开发的时候,相当痛苦,下载各种sdk,而且都需要翻墙,苦不堪言. 用HBuilder做开发,只需要基础的java环境,其余的android和ios环境统统不需要. HBuilder可以做到这一点,是因为: 1.将打包放到的云端,免去了本地搭建环境进行打包的痛苦, 2.将调试直接设置为真机调试,免去了各种模拟器调试的痛苦. java环境 只需要最基础的java环境,也就是c

HBuilder开发App教程01-推开前端开发App的大门

奇妙的前端,奇妙的js 众所周知,自从js有nodejs后,前端人员可以华丽的转身,去开发高并发非阻塞的服务端程序, 随着html5的出现,伴随一些amazing的特性,h5开发app的技术越发的成熟, 自从2008年国外推出phonegap后,前端人员又踏上开发app的路程, 今年来国内也对应推出了一些可以让前端人员开发app的ide, 不过大部分是收费的,强定制的,这里就不一一列举了. 这里推荐DCloud推出的HBuilder,一句话谁用谁知道. 一次开发两种app 通过HBuilder的

HBuilder开发App教程06-首页

实战 前面几节基本是一些概念的普及, 正如前面提到的,本教程会以滴石作为范例进行解说, 有兴趣的能够先行下载体验一下.或者下载源代码研究下. 新建项目 打开HBuilder,在项目管理器中右键--新建--移动app,或者直接ctrl+n,a, 见到例如以下界面.填入项目名称,选择mui项目. 新建完毕后.默认生成的文件夹例如以下.基本和前端开发的文件夹结构类似. 连接手机 本教程临时以android为例,最后会另外解说ios手机的开发,大同小异. 用数据线连接android手机,将手机中的设置-

HBuilder开发App教程04-最难搞定的是mui

前言 前几篇说到一些HBuilder开发app的基础教程, 现在来说一下HBuilder开发app的难点,或者说是上手的难点, 就是mui, 如果你没有研究mui就贸然的上手HBuilder,那你的开发过程是痛苦的, 花一点时间研究下mui,对你之后开发app有很大的帮助. 网址 教程再好,也会有疏漏的地方,还需要你仔细阅读官方文档, 附地址:http://dcloudio.github.io/mui/ init mui封装了很多常用的页面方法,都需要在init中设置,例如: 1.和上拉加载,下

HBuilder开发App教程07-列表页

说明 接着上节的内容,本节讲首页的list页面, 如果看过上一节你就会明白"首页"是由只有头部的index页面和列表list页面组成的, 本节涉及到: 1.几种页面的打开方式 2.websql的应用 3.页面内容的加载 4.页面实现 几种页面打开方式 如果看过以前的章节你会明白,在Hbuilder,mui中需要放弃href跳转, 而专用mui自带的页面打开方式,为什么?请浏览:http://ask.dcloud.net.cn/article/122 这里大概讲一下,详细讲解请关注下一节

HBuilder开发App教程09-侧滑菜单

侧滑菜单 功能 上节讲到了列表页,这节讲一个比较常用的功能,侧滑菜单, 在本app中策划菜单用来记录已经完成的事项. 实现方式 用Hbuilder实现类似侧滑菜单这样原生app功能,一般有两种实现方式,详见:这里. 一是webview实现,二是div模拟实现, 两者的区别是div实现简答,但是偶尔效果不是很好, 而webview实现稍微复杂,页面传值也复杂,但是效果好点,一般推荐webview实现方式. index.html 代码 index.js中需要添加如下代码, var main = nu

HBuilder开发App教程10-完成事项

回顾 回顾一下之前的要点: 1.Hbuilder创建项目,真机调试 2.首页 3.列表页 4.侧滑菜单 5.websql 6.几种页面打开的方式 再讲下本节的要点: 1.fire方式页面间传值 2.再讲websql 完成事项 功能描述 左滑待办事项会出现完成按钮,点击按钮会将待办事项完成,并加入侧滑菜单, 过程 1.左滑出现完成按钮 2.点击按钮后将事项从待办表中删除 3.同时将事项加入完成表中 4.侧滑菜单显示完成事项 页面 涉及两个页面,一个是list,一个是menu, 为了让操作更流畅,所

编写高质量代码改善C#程序的157个建议——建议31:在LINQ查询中避免不必要的迭代

建议31:在LINQ查询中避免不必要的迭代 无论是SQL查询还是LINQ查询,搜索到结果立刻返回总比搜索完所有的结果再将结果返回的效率要高. 示例代码: class MyList : IEnumerable<Person> { //为了演示需要,模拟了一个元素集合 List<Person> list = new List<Person>() { new Person(){ Name = "Mike", Age = 20 }, new Person()