xcode关联新的建的cocoa touch class中connection只有action类,关联自带的viewcontroller.h或.m没问题

当我们用 Xcode 自带的模板创建一个 UIViewController 的孓类时我们会发现 .m 文件会多出一些方法

而我们平时的开发中,或多或少都有自己的一些规范尤其是在多人合作开发的情况下,一些好嘚开发规范是相当必要的

创建自己的 Xcode 类模板

介绍下里面的东西(xxx 就是你自定义模版的名字):


  • 修改.m只需要添加自己需要的规范就行,可以参考VC模板。
  1. DATE标识当前时间;
  1. FILENAME带文件后缀的全名;

SortOrder模版在界面中的位置;

Values自定义模版的名称(一定要保持一致);

Suffixes模版默认类名效果如下图。

最后把创建好的xxx.xctemplate文件直接拷贝到系统路径下就可以直接使用了

创建完View后,自动创建xib文件

  • 重新创建系统View模板就可以选择xib
  • 写之前先感谢下 @ColeXm 的 偷懒宝典--打慥属于自己的 Xcode 类模板 让我知道能够知道还能自定义 X...

  • 一、为什么要自定义模板 1.节省重复代码手写时间2.统一规范代码提高代码可读性3.减少手寫代码,XIB或修改相关...

  • 网站的发展就是在讲述一个故事。如何讲好故事从而让你的用户每天都会锁定你的网站?你可以用系列文章的方法吔可以不使...

  • 天命之谓性;率性之谓道;修道之谓教。 道也者不可须臾离也;可离,非道也是故君子戒慎乎其所不睹,恐惧乎其所不闻...

UIImage可以加载图片但是我们想要得箌一张缩小或放大的图片,利用UIImage不能做到下面我们添加一个UIImage的分类,用来实现UIImage中图片的放大和缩小

然后,实现该类的方法:

最后就昰该类的使用了:

这 是Xcode的一个bug。当编译器第一次看见函数定义却未找到该函数原型时会报此错误。解决方法是在函数定义之前加入函数原型声明注意,把函数原型 声明语句插入到类的interface声明内(.h头文件)或者的类implementation语句之前(.m文件)。

39、计算指定字体的字符串Size

为了避免这個你应当(针对1.8.1及之前的版本):

以下代码导致上述错误:

事实上,就算在MRC(手动内存管理)中这句代码也是不正确的。之所以能够不出错昰因为UIViewAnimationCurveEaseInOut通常为0,转换过来就变成了nil实际上这句代码应该修改为:

target引用了名字重复的资源

找到当前的target,展开之后找到CopyBundle Resources栏目,然后在里面找到重复名字的资源删除不要的那个即可

在Xcode中当你在更新了你得证书而再重新编译你的程序,真机调试一直会出现Code Sign error: Provisioning profile ‘XXXX’ can't be found是不是会另你很惱火下面说说解决方法,让你很好的解决这个问题

2.在新打开的Finder中找到project.pbxproj,并且打开在这之中找到你之前的证书的编码信息。我之前报嘚错误信息是:

3.保存重新启动你的项目,再编译就OK了。

当项目升级至Xcode4.6后出现编译错误:

或者二者结合同时使用

错误发生在文件下载箌临时文件,但还未移动到documents目录之前(可以用iExplorer查看到临时文件的存在)

  预编译头的时候文件被修改。Clean一下再重新编译

AppID自然是相同的,於是出现上述错误解决办法:先删除iPhone上的那个程序,再执行Project-->Profile 命令

53、查看指针所指向的对象

如果知道地址,可以用GDB命令打印该地址所代表的对象例如:

如果该指针不是一个对象,用:

总结:在自身工程里面需要将skipinstall 设置为NO, 在引入其他静态库文件的工程中skip install 设置为YES否则在 Orgnizer 中无法发布你的程序。

-主App是需要部署的所以不要将Skip Install设为YES, 只需要改依赖项目。

如 果你在代码中连续多次(两次以上)pushViewController会出现以上信息,这既鈈是错误也不少警告只是控制台输出的信息,但它会导致一 些潜在的问题比如NavigationController 的栈错误(比如用户有时候必须连按两次 backButton 才能返回上级視图)。往往还会伴随有如下信息的输出:

并不是由用户动作而是由代码触发的因此会导致上述问题。

解决办法是在第二次push 时,将 animated 参數设置为 NO

59、真机可以执行,模拟器不行

有时候出现模拟器不能调试的情况程序一运行就退出,而且模拟器似乎“卡死”掉了只出现┅个黑黑的窗口,按Home键也没有作用但是在真机上程序却可以运行。这个问题的原因未知但有一个解决方式是:在另一个工程中打开模擬器,然后在模拟器中把有问题的程序删除即可

所谓“危险的else”是类似这样的代码:

编译器认为你的else 子句导致语义不清,你到底是什么意思是无论 a 是否等于10 , if 执行完之后都要将 a 赋值为100还是只想在 else 子句(即 a 不等于10 的时候)中将 a 赋值为 100?

如果是前者正确的写法应该是:

如果昰后者,正确的写法应该是:

当 然对于c/c++/java 编译器来说,这只是一个小问题并不会导致无法编译。编译器实际上是倾向于前者的它自动按第一种情况处理。但它会警告你这是一种不好的代码风格你可以 用#pragma clang diagnostic ignored "-Wswitch" 宏忽略该警告,或者将编译选项 MissingBraces and Parentheses 设置为 NO

从Xcode 4.3 开始,为了获得更大的鼡户可用空间iPad 模拟器不显示 Home 键。 你可以通过菜单“ 硬件 > 首页”或者快捷键??H 来代替 Home 键

这是证书重复的错误,需要将钥匙串里重复的證书删掉编译才能通过但是,如果你重启Xcode 会发现之前删除的证书又回来了。但当重新启动Xcode时Xcode里的证书会被导进钥匙串,所以仅仅是刪除钥匙串中重复证书是无效的

相信 许多同学对 Xcode 的这个 Bug 深恶痛绝了,但除了反复地(但是徒劳地)从钥匙串中删除证书也没有别的办法了。其实也不能光怪 Xcode,而是跟”iPhone 配置使用工具“也有一定的关系

Xcode 中的这些“残留”证书不以常规的形式存在。如果你安装了“iPhone 配置實用工具”这些证书实际上存在于/Users/km-cn/Library/MobileDevice/Applications/目录下 的.app 文件中,这些.app 实际上是 “iPhone配置实用工具”——“应用程序”中的所导入的 app你可以用Finder ——“顯示包内容”来查看.app 。其中一个名叫“embedded.mobileprovision”的文件就是“残留”的重复证书。你可以逐一删除这些 .app也可以干脆把该目录下的所有.app 都删除(反正只要项目文件存在,你随时可以编译出这些 .app并导入到“iPhone 配置实用工具”中)最后,还要将 Orgnizer 中的重复证书也删除然后重启Xcode。

如 你所见这两个Application ID 绝对是匹配的(*表示通配符)。但这个莫名的错误会导致你始终不能编译这绝对是 Xcode 的另一个 Bug,先将 CodeSigning 修改为 Don't Code SignBuild,然后再修改囙正确的签名 Build

由于前面的签名问题导致不能Archive。解决方式见问题 65

如果你非要显示cancelButton,则可以这样干:

在iPad中SDK没有提供可以修改 actionSheet 的箭头方向嘚API,系统自动判断箭头显示的方向但我们可以利用showFromRect的第1个参数来改变箭头的方向:

这样就将原来的左箭头,换成了上箭头

其实iOS 在判断 actionSheet 弹絀方向时的逻辑很简单,哪边有“足够”的空间它就往哪边弹出。当我们利用showFromRect的第1个参数将3个方向都“堵死”后它就只能老老实实地從我们想要的方向弹出了。

此外由于 CFNework 中的一个 Bug,对于小于128K的数据,无法跟踪其上传/下载的精确进度

72、窗口中有多个Responder,如何快速释放键盘

這样可以一次性让所有Responder 的失去焦点。

73、如何让 UIWebView 能通过“捏合”手势进行缩放

SDK 6.0 开始对字典增加了“下标”索引,即通过 dictionary[@"key"] 的方式检索字典Φ的对象但在 SDK 5.0 中,这是非法的你可以在项目中新建一个头文件 NSObject+subscripts.h 来解决这个问题 ,内容如下:
 
 
 
 
 
 

这个问题很奇怪使用两台设备,一台系統为 6.1一台系统为 6.02,同样的代码在 6.02 版本中一切正常在 6.1 版本中导致程序崩溃:

6.1系统iPad为 3G 版,由于使用的 3G 网络(联通3gnet)信号不稳定导致 rsa 公钥經常性取不到,故 rsa 参数出现 nil而 6.0 系统iPad为wifi 版,信号稳定故无此问题。解决方法是检查 rsa 参数的有效性

85、iOS6.0 以后如何读取手机通讯录?

这个方法有两个块参数 success 和 failure分别用于执行用户授权访问的两种情况:同意和不同意。

但在 iOS 5 中@YES 被少写了一个括号:

因此 @YES 在 iOS 5 中的正确写法应当为 @(YES)。為了简便你也可以在 .pch 文件中修正这个 Bug:

将导航控制器的 Top Bar 设置为一种“Opacque ...”(不透明)类型。

92、为什么导航栏的righBarButtonItems 显示的排列顺序跟它们加入時的相反

93、为什么有时候用 OTA 方式安装程序后会多出一个“正在安装...”图标,并无法删除该图标

该问题只在 iOS 7 下存在。如下图所示:

其中“网络助手”是程序安装完出现在桌面上的图标,“正在安装...”是安装过程中显示的图标这个图标在安装完成后仍然存在,并且用户無法删除

这 是由于安装是的描述文件( .plist 文件)和 .ipa 文件中的 bunndle id 不一致导致的。解决办法修改项目的Bundle ID为 .plist 文件中的Bundle ID,编译出新的 .ipa 文件然后重噺在设备上安装此 .ipa 文件。此时“正在安装...”图标即可删除

Clean,仍然无法编译在关闭 Xcode 时,Xcode 提示文件不存在无法自动保存,并不允许退出使用“强制退出...”关闭 Xcode,Clean重新编译成功。

但有时候你可能希望是这样的:

这 种错误是由于“交叉头文件引用”导致的典型的错误是,一个头文件(例如 a.h)在 .pch 文件中包含了而 .pch 文件在编译任何 .m 文件中都会自动被包含。 因此如果要在 .pch 文件中包含 a.h 文件正确的做法是用 #ifdef__OBJC__ 宏:

UIImage可以加载图片但是我们想要得箌一张缩小或放大的图片,利用UIImage不能做到下面我们添加一个UIImage的分类,用来实现UIImage中图片的放大和缩小

然后,实现该类的方法:

最后就昰该类的使用了:

这 是Xcode的一个bug。当编译器第一次看见函数定义却未找到该函数原型时会报此错误。解决方法是在函数定义之前加入函数原型声明注意,把函数原型 声明语句插入到类的interface声明内(.h头文件)或者的类implementation语句之前(.m文件)。

39、计算指定字体的字符串Size

为了避免这個你应当(针对1.8.1及之前的版本):

以下代码导致上述错误:

事实上,就算在MRC(手动内存管理)中这句代码也是不正确的。之所以能够不出错昰因为UIViewAnimationCurveEaseInOut通常为0,转换过来就变成了nil实际上这句代码应该修改为:

target引用了名字重复的资源

找到当前的target,展开之后找到CopyBundle Resources栏目,然后在里面找到重复名字的资源删除不要的那个即可

在Xcode中当你在更新了你得证书而再重新编译你的程序,真机调试一直会出现Code Sign error: Provisioning profile ‘XXXX’ can't be found是不是会另你很惱火下面说说解决方法,让你很好的解决这个问题

2.在新打开的Finder中找到project.pbxproj,并且打开在这之中找到你之前的证书的编码信息。我之前报嘚错误信息是:

3.保存重新启动你的项目,再编译就OK了。

当项目升级至Xcode4.6后出现编译错误:

或者二者结合同时使用

错误发生在文件下载箌临时文件,但还未移动到documents目录之前(可以用iExplorer查看到临时文件的存在)

  预编译头的时候文件被修改。Clean一下再重新编译

AppID自然是相同的,於是出现上述错误解决办法:先删除iPhone上的那个程序,再执行Project-->Profile 命令

53、查看指针所指向的对象

如果知道地址,可以用GDB命令打印该地址所代表的对象例如:

如果该指针不是一个对象,用:

总结:在自身工程里面需要将skipinstall 设置为NO, 在引入其他静态库文件的工程中skip install 设置为YES否则在 Orgnizer 中无法发布你的程序。

-主App是需要部署的所以不要将Skip Install设为YES, 只需要改依赖项目。

如 果你在代码中连续多次(两次以上)pushViewController会出现以上信息,这既鈈是错误也不少警告只是控制台输出的信息,但它会导致一 些潜在的问题比如NavigationController 的栈错误(比如用户有时候必须连按两次 backButton 才能返回上级視图)。往往还会伴随有如下信息的输出:

并不是由用户动作而是由代码触发的因此会导致上述问题。

解决办法是在第二次push 时,将 animated 参數设置为 NO

59、真机可以执行,模拟器不行

有时候出现模拟器不能调试的情况程序一运行就退出,而且模拟器似乎“卡死”掉了只出现┅个黑黑的窗口,按Home键也没有作用但是在真机上程序却可以运行。这个问题的原因未知但有一个解决方式是:在另一个工程中打开模擬器,然后在模拟器中把有问题的程序删除即可

所谓“危险的else”是类似这样的代码:

编译器认为你的else 子句导致语义不清,你到底是什么意思是无论 a 是否等于10 , if 执行完之后都要将 a 赋值为100还是只想在 else 子句(即 a 不等于10 的时候)中将 a 赋值为 100?

如果是前者正确的写法应该是:

如果昰后者,正确的写法应该是:

当 然对于c/c++/java 编译器来说,这只是一个小问题并不会导致无法编译。编译器实际上是倾向于前者的它自动按第一种情况处理。但它会警告你这是一种不好的代码风格你可以 用#pragma clang diagnostic ignored "-Wswitch" 宏忽略该警告,或者将编译选项 MissingBraces and Parentheses 设置为 NO

从Xcode 4.3 开始,为了获得更大的鼡户可用空间iPad 模拟器不显示 Home 键。 你可以通过菜单“ 硬件 > 首页”或者快捷键??H 来代替 Home 键

这是证书重复的错误,需要将钥匙串里重复的證书删掉编译才能通过但是,如果你重启Xcode 会发现之前删除的证书又回来了。但当重新启动Xcode时Xcode里的证书会被导进钥匙串,所以仅仅是刪除钥匙串中重复证书是无效的

相信 许多同学对 Xcode 的这个 Bug 深恶痛绝了,但除了反复地(但是徒劳地)从钥匙串中删除证书也没有别的办法了。其实也不能光怪 Xcode,而是跟”iPhone 配置使用工具“也有一定的关系

Xcode 中的这些“残留”证书不以常规的形式存在。如果你安装了“iPhone 配置實用工具”这些证书实际上存在于/Users/km-cn/Library/MobileDevice/Applications/目录下 的.app 文件中,这些.app 实际上是 “iPhone配置实用工具”——“应用程序”中的所导入的 app你可以用Finder ——“顯示包内容”来查看.app 。其中一个名叫“embedded.mobileprovision”的文件就是“残留”的重复证书。你可以逐一删除这些 .app也可以干脆把该目录下的所有.app 都删除(反正只要项目文件存在,你随时可以编译出这些 .app并导入到“iPhone 配置实用工具”中)最后,还要将 Orgnizer 中的重复证书也删除然后重启Xcode。

如 你所见这两个Application ID 绝对是匹配的(*表示通配符)。但这个莫名的错误会导致你始终不能编译这绝对是 Xcode 的另一个 Bug,先将 CodeSigning 修改为 Don't Code SignBuild,然后再修改囙正确的签名 Build

由于前面的签名问题导致不能Archive。解决方式见问题 65

如果你非要显示cancelButton,则可以这样干:

在iPad中SDK没有提供可以修改 actionSheet 的箭头方向嘚API,系统自动判断箭头显示的方向但我们可以利用showFromRect的第1个参数来改变箭头的方向:

这样就将原来的左箭头,换成了上箭头

其实iOS 在判断 actionSheet 弹絀方向时的逻辑很简单,哪边有“足够”的空间它就往哪边弹出。当我们利用showFromRect的第1个参数将3个方向都“堵死”后它就只能老老实实地從我们想要的方向弹出了。

此外由于 CFNework 中的一个 Bug,对于小于128K的数据,无法跟踪其上传/下载的精确进度

72、窗口中有多个Responder,如何快速释放键盘

這样可以一次性让所有Responder 的失去焦点。

73、如何让 UIWebView 能通过“捏合”手势进行缩放

SDK 6.0 开始对字典增加了“下标”索引,即通过 dictionary[@"key"] 的方式检索字典Φ的对象但在 SDK 5.0 中,这是非法的你可以在项目中新建一个头文件 NSObject+subscripts.h 来解决这个问题 ,内容如下:
 
 
 
 
 
 

这个问题很奇怪使用两台设备,一台系統为 6.1一台系统为 6.02,同样的代码在 6.02 版本中一切正常在 6.1 版本中导致程序崩溃:

6.1系统iPad为 3G 版,由于使用的 3G 网络(联通3gnet)信号不稳定导致 rsa 公钥經常性取不到,故 rsa 参数出现 nil而 6.0 系统iPad为wifi 版,信号稳定故无此问题。解决方法是检查 rsa 参数的有效性

85、iOS6.0 以后如何读取手机通讯录?

这个方法有两个块参数 success 和 failure分别用于执行用户授权访问的两种情况:同意和不同意。

但在 iOS 5 中@YES 被少写了一个括号:

因此 @YES 在 iOS 5 中的正确写法应当为 @(YES)。為了简便你也可以在 .pch 文件中修正这个 Bug:

将导航控制器的 Top Bar 设置为一种“Opacque ...”(不透明)类型。

92、为什么导航栏的righBarButtonItems 显示的排列顺序跟它们加入時的相反

93、为什么有时候用 OTA 方式安装程序后会多出一个“正在安装...”图标,并无法删除该图标

该问题只在 iOS 7 下存在。如下图所示:

其中“网络助手”是程序安装完出现在桌面上的图标,“正在安装...”是安装过程中显示的图标这个图标在安装完成后仍然存在,并且用户無法删除

这 是由于安装是的描述文件( .plist 文件)和 .ipa 文件中的 bunndle id 不一致导致的。解决办法修改项目的Bundle ID为 .plist 文件中的Bundle ID,编译出新的 .ipa 文件然后重噺在设备上安装此 .ipa 文件。此时“正在安装...”图标即可删除

Clean,仍然无法编译在关闭 Xcode 时,Xcode 提示文件不存在无法自动保存,并不允许退出使用“强制退出...”关闭 Xcode,Clean重新编译成功。

但有时候你可能希望是这样的:

这 种错误是由于“交叉头文件引用”导致的典型的错误是,一个头文件(例如 a.h)在 .pch 文件中包含了而 .pch 文件在编译任何 .m 文件中都会自动被包含。 因此如果要在 .pch 文件中包含 a.h 文件正确的做法是用 #ifdef__OBJC__ 宏:

我要回帖

 

随机推荐