1、XCode的 Stack Trace,调试时抛出异常,定位到某一行代码html
在Xcode调试程序的时候,老是会出现不知道错误在什么地方的问题,如今有一个办法,能够具体定位到错误行的代码,试一下吧!java
操做以下:安全
一、在XCode界面中按cmd + 6快捷键,或者直接点击选项卡,跳到Breakpoint的tabapp
二、而后点击左下角的+号,增长一个Exception的断点,以下图所示。iphone
三、接下来会出现一个“All Exception”的调试选项:ide
四、将鼠标放到上面,右击选择“Edit Breakpoint”,能够查看选项的具体内容以下:(不用作任何修改)svn
五、当异常出现时,会自动停在异常处,而不会抛出到UIApplicationMain。就能够定位到具体抛出异常的代码了。函数
2、iOS 协同开发出fatal error: file 'XX-Prefix.pch' has been modified since the precompiled header was built字体
在协同开发的时候,刚刚从svn下载到本地的代码,出现“fatal error: file 'XX-Prefix.pch' has been modified since the precompiled header was built”的问题,这个其实不是什么问题,解决方案以下:ui
一、找到 XX-Prefix.pch 文件 注释掉下面的代码:
1 #ifdef __OBJC__ 2 #import <UIKit/UIKit.h> 3 #import <CoreData/CoreData.h> 4 #import <Foundation/Foundation.h> 5 #endif
而后,从新编译项目
二、打开上面步骤中的注释
而后再次编译运行,发现居然没有上面的错误了,问题解决。
3、在Linux/Mac下面删除全部的.svn文件
在使用svn管理代码的时候,若是提交原有的svn管理下的project到新的svn目录下时,须要先删除原有的文件夹里面的全部的.svn文件下面的全部内容,不然直接提交会致使失败。
注意:最好先拷贝一个新的项目,而后删除备份文件夹下面的.svn文件。以避免原有的svn项目有未提交的代码,致使文件不能提交,形成丢失等。
下面这种方法能够简单的使用终端删除全部的.svn文件。
一、首先先定位到你的项目的目录文件下面,好比个人项目在桌面上的svnProject目录下面,则须要在终端执行以下命令:
1 ~ mac$ cd Desktop/svnProject/
执行完毕以后,就处在当前的svnProject目录下面了。
二、再执行以下命令,就能够删除此目录下面的全部的.svn文件了
能够看到此目录下面的全部的.svn文件都被删除了 ,包含子目录中的.svn文件也被删除了。
三、接下来就可使用此目录下面的项目,上传至svn了。
题外话:.svn文件一般是隐藏的,能够参考 苹果电脑MAC 在Finder里面显示隐藏文件方法 来显示Mac电脑下面隐藏的文件。
4、 苹果电脑MAC 在Finder里面显示隐藏文件方法
在终端里输入下面命令便可让它们显示出来。
defaults write com.apple.finder AppleShowAllFiles -bool true
若是想恢复隐藏,能够用这个命令:
defaults write com.apple.finder AppleShowAllFiles -bool false
注意:一、执行命令后须要重启 Finder 才能看到效果。
二、不要乱动不懂的隐藏文件,可能会损坏你的系统。
也能够直接用这软件实现隐藏:
5、iOS如何使用第三方字体
一、从网上下载所需字体的TTF文件。将字体所对应的TTF文件拖入项目中。
二、而后在info.plist中添加一个新的键Fonts provided by application, NSArray类型的, 在其对应的item里面的string值为**.TTF,如图:
三、接下来就是要知道对应字体的名字FontName了。一个字体文件包括如下几个内容:文件名、字体名称、字体具体名称,咱们只有文件名,不知道字体名称是什么,更不知道具体的名称,那么咱们就须要写代码得到具体的字体名称。方法以下:
NSArray *familys = [UIFont familyNames]; for (int i = 0; i < [familys count]; i++) { NSString *family = [familys objectAtIndex:i]; NSLog(@"=====Fontfamily:%@", family); NSArray *fonts = [UIFont fontNamesForFamilyName:family]; for(int j = 0; j < [fonts count]; j++) { NSLog(@"***FontName:%@", [fonts objectAtIndex:i]); } }
打印结果:
2013-04-10 17:37:09.758 FontDemo[3336:c07] =====Fontfamily:Thonburi
2013-04-10 17:37:10.442 FontDemo[3336:c07] ***FontName:Thonburi-Bold
2013-04-10 17:37:10.827 FontDemo[3336:c07] ***FontName:Thonburi-Bold
2013-04-10 17:37:12.403 FontDemo[3336:c07] =====Fontfamily:Snell Roundhand
2013-04-10 17:37:12.404 FontDemo[3336:c07] ***FontName:SnellRoundhand-Black
四、如今能够知道文字包里面的字体名称了吧?接下来使用就能够咯:
注意:
文字的使用但是有版权问题的噢,程序中要想使用某些特殊的文字,必须得有版权哦,不然最好不要用,会有侵权问题。
6、ARC下NSNotificationCenter须要remove
- (void) dealloc 2 { 3 // [super dealloc] 千万不要多此一举 4 [[NSNotificationCenter defaultCenter] removeObserver:self]; 5 }
7、const or #define
下面是你们常见的两种定义优先选择第二种
#define PI 3.14159 //只预处理时进行符号替换,不推荐 const doulbe Pi=3.14159 //安全性高,和效率上推荐
8、常量字符串声明
Foo.h
extern NSString *const XXFooDidBarNotification;
Foo.m
NSString *const XXFooDidBarNotification =@"XXFooDidBarNotification”
9、调试的技巧
有没有用过下面的log输出呢?
-(void) buttonPressed :(UIButton *)button { NSLog(@"Stack trace: %@", [NSThread callStackSymbols]); NSLog(@"Current selector: %@", NSStringFromSelector(_cmd)); NSLog(@"Object class: %@", NSStringFromClass([self class])); NSLog(@"Filename: %@", [[NSString stringWithUTF8String:__FILE__] lastPathComponent]); ... }
10、注释技巧
在代码中加注释时,若是以 // TODO: 或 // FIXME: 或者 // !!!: 或 // ???: 开头的话,此注释会出如今方法的下列列表里,方便往后跟踪。利用Xcode4中的自定义代码片断,能够用一个快捷键插入一个预先定义好的注释片断