1. error:
'***' undeclared(first use in this function)
還沒有定義(在此函式中第一次使用)。
注:使用某乙個變數時,如果使用前還沒有定義,會出現該錯誤。在oc以及c語言中,使用變數前必須先定義它。
這個錯誤經常出現在忘記進行變數定義的情況下。但是,慢慢拿習慣後,這種錯誤會出現得很少。反而經常出此種錯誤的原因是變數名拼寫錯誤,即出現使用的變數名與定義的變數名不一致的情況。
例: - (void)test
正確的寫法:
- (void)test
2.error: parse error before '***' token
在『***』之前發生了解析錯誤。
注:這個是在發生低階失誤時才會出現的錯誤。解析錯誤的意思是程式語句以oc的語法不能解析。仔細看看發生錯誤的地方,一定會發現不符合語法的部分。
例: - (void
)test
3. error: invalid preprocessing directive #***
關鍵字#***不正確。
注:當#include,#import等以#開始的關鍵字出現拼寫錯誤時,會顯示這種錯誤資訊。在xcode中,緊隨#後輸入的字串都會變色,非常容易發生錯誤。
例: #improt //
#import拼寫錯誤
4. error: ***.h: no such file or directory
名為***.h的檔案或目錄不存在。
注:在#include,#import中指定的檔案不存在時會顯示此種資訊。最可能的原因是,檔名輸入錯誤,好好檢查一下檔名。
如果發生這種錯誤,最好也確認一下實際檔案。因為還有可能是檔案的檢索路徑沒有指定正確。只要檔案是包含在工程的資料夾中都是沒有問題的。
例: #import""
//正確的是:
#import
5. error: undefined symbols: '***'
符號『***』沒有被定義。
注:此錯誤不僅在編譯時發生,在連線時也會發生。連線時使用了原本不存在的類或者函式時會出現此資訊。
最經常出現的是,函式名出現輸入錯誤。呼叫c語言函式的時候,就算名稱錯誤,編譯也會通過的。但是在連線的時候就會出現此錯誤的資訊。
其他可能的原因是,使用cocoa以外的框架或者庫時,這些框架或者庫沒有包含進工程中。需要的庫或者框架都必須包含到工程中。
二、常見的警告資訊
警告中有絕對需要修正的,也有完全不用理會的。但是,將所有的警告都消去還是讓人比較舒服的,所以還是要盡量修改。
1. warning: '***' may not respond to 'yyy'
類『***』中沒有方法『yyy』的宣告。
注:當呼叫某一類中的方法時,類宣告中並沒有包含此方法出現時此資訊。首先可能的原因是,方法名輸入錯誤,請仔細檢查一下方法名稱,確保正確。
例: nsstring *str;
str = [nsstring stringwithforatm:@"
%d", 10];//
方法名稱錯誤。
正確的是:
nsstring *str;
str = [nsstring stringwithformat:@"
%d", 10];
另外,在某一類呼叫自己定義的方法時,如果方法都追加在類宣告中的話,不會出現任何問題。如果實際呼叫的地方在方法定義的前方,也會出現這種警告資訊。這是因為編譯器對方法定義的檢查是從檔案的開始處順序經行的。利用這個特性,如果不想其他類呼叫方法,可以不用追加在類宣告中。
例: 有警告:
- (void)methoda
- (void)methodb
無警告:
- (void)methodb
- (void)methoda
如果不理會這個警告會出現什麼情況?首先編譯與連線是能通過的,因此應用程式時能夠啟動的。但應用程式實際執行到此處時,才會檢查呼叫的方法到底是否真的在類中定義。如果沒有定義則丟擲異常,否則正常執行通過。因此,如果確實已經在類中定義了這個方法,可以故意忽略此警告。
2. warning: unused variable '***'
變數『***』沒有被使用。
注:變數已經定義了,但是一次都沒有被使用時出現此資訊。經常出現的是,曾經使用的變數,經過修改後不再使用它了,但定義還儲存著。此時,只用刪除變數的定義即可。不刪也可以。
另外,定義的變數名與使用的變數名不一致時,也會出現這個警告資訊。
例: - (void)test
正確的是:
- (void)test
3. warning: local declaration of '***' hides instance variable
本地變數『***』覆蓋了例項變數(即同名)。
注:當方法中定義的變數名與例項變數的某個變數同名,就會顯示這個警告資訊。因為同名,所有有一方將不能訪問。 這時外部的例項變數將不能被訪問,將一方變數名修改後即可。
例: @inte***ce
myobject:nsobject
@end
@implementation myobject
- (void)updatecount:(int)count
正確的是:
@inte***ce
myobject:nsobject
@end
@implementation myobject
- (void)updatecount:(int)num
4. warning: incomplete implementation of class '***'
warning: method definition for 'yyy' not found
類『***』的**編寫沒有完成。
方法『yyy』的定義沒有找到。
注:沒有給類宣告中的某個方法編寫執行**時,會顯示此警告資訊。出現警告後,該完成的執行**應該完成,如果覺得這個方法不需要了,可以在類宣告檔案中刪除此方法的定義。另外,如果實際**處的方法名與定義的方法名出現不一致時,也會出現此警告資訊。
5.warning: control reaches end of non-void function
非void型別的函式沒有設定返回值。
注:方法或函式需要返回值的情況下,沒有設定任何返回值時出現的警告資訊。 返回值型別為void以外的方法中,請務必返回乙個具體的值。如果不需要返回值,請將方法的返回值型別修改為void。
相反,如果返回值設定為void型別,而在函式或方法中返回了某個值的時候,會顯示 "'return' with a value, in function returning void(返回void的函式中,返回了值)"的警告。
例: - (int)test:(int)count
正確的是:
- (int)test:(
int)count
6. warning: passing argument n of '***' assignment from distinct objective-c type
方法『***』的第n個引數與objective-c的型別不一致。
注:向方法『***』中傳遞引數時,傳遞過來的引數物件與方法中宣告的引數型別不一致時,會出現此警告。例如,宣告的是nsenumerator型別,傳遞進來的為nsstring型別,則顯示此警告。
最可能發生的原因是,方法的引數較多,設定時將順序弄錯了。在使用引數較多的方法時,出現這個警告資訊的情況下,請仔細檢查一下引數的順序。
另外,在定義方法時可以利用這個警告。如果想將傳遞過來的引數指定為特定的類時,給引數定義明確的型別。如果任何物件都可以的情況,則定義為id型別。引數的定義包含了類設計者給使用者的資訊。
例: intvalue = 3;
nsstring *str;
str = [nsstring stringwithformat:"
%d", value];
//stringwithformat:的引數不能是c語言的字串。
正確的是:
intvalue = 3;
nsstring *str;
str = [nsstring stringwithformat:"
@%d", value];
//在引數字串前追加@符號
iOS開發 常見錯誤和警告總結
nsstring是大家最常用的乙個類,幾乎人人都脫離不開,它的功能非常強大,但是它其中有點奧秘直到碰到了才發現。正文 nsstring的api中有乙個rangeofstring 這個也是大家常用的在字串中查詢的的api。我一般圖省事,都是用這個,很少用rangeofstring option 找到了...
IOS開發常見錯誤
1 問題表現 什麼情況?方法居然無法拉線?問題簡述 ios的空間拉線到乙個.h m檔案中 居然多次拖動無效.問題解決 ios的空間響應單單在 中建立乙個方法是沒用的,這個時候通常跟空間是沒有響應關係的 建立控制項的方式另外說 所以這個時候我們需要按住control鍵拖動一條線與對應的方法產生響應 在...
Keil常見錯誤警告
1 warning 767 d conversion from pointer to smaller integer 解釋 將指標轉換為較小的整數 影響 可能造成的影響 容易引起資料截斷,造成不必要的資料丟失。如果出現bug 很難除錯。改正 盡量避免這種轉換,避免不了要確定轉換的資料不會引起資料丟失...