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中的自定義代碼片斷,能夠用一個快捷鍵插入一個預先定義好的註釋片斷