2010-02-17 50 views
2

我正在做一些非常愚蠢的事情,我沒有看到它。返回值真的很愚蠢

我有一個方法的對象DOC:

-(float) currentOrient 
{ 
    return 50.5; 
} 

在另一個對象,我呼籲:

-(void) showPage 
{ 

    float rot2=0; 
    rot2 = [doc currentOrient] ; 
    NSLog(@"SP rotation is %.2f", rot2); 
} 

但是,輸出是:

SP rotation is 1112145920.000000 

無,一個問題是「爲什麼%2f格式不正確?」但更令人困惑的問題是「這個號碼從哪裏來?」是的,我已經用調試器走過了它,腐爛的價值從它開始的垃圾改變了。這個數字似乎是一致的。

顯然一些真正愚蠢的是怎麼回事...

回答

1

聽起來好像showPage方法不知道currentOrient的正確返回類型,所以它將解釋返回的值作爲int並將該無意義的int轉換爲float。你是否收到任何警告?你確定你正確導入currentOrient的標題嗎? currentOrient方法是否正確聲明?

+0

未知方法的默認返回類型是' id',而不是'int'。 – dreamlax 2010-02-18 01:28:08

+0

是的,但是有很多理由可能會認爲「int」在這裏(僅舉一個例子,可能有一個名稱相同的方法,而另一個類中可能有一個int類型的返回類型)和一個混合返回類型肯定是它發生的事情。如果它假定'id',他會得到一個錯誤,因爲該類型與浮點數不兼容。 – Chuck 2010-02-18 01:39:23

+0

對不起,我指的是你的語句「'showPage'方法不知道'currentOrient'的返回類型,所以它將解釋返回的值作爲int」。如果*真正的*方法不知道返回類型,它將假定'id',而不是'int'。 – dreamlax 2010-02-18 02:41:48

1

我可以回答第一個問題:

爲何%2F不正確格式化?

因爲它應該是%1.2f四捨五入至小數點後兩位

,並在第二次猜測(我相信是你想達到什麼樣的?):

你有代碼中名爲rot的屬性?除此之外...... 聳聳肩 ......我不知道 - 我假設你已經簡化了這個例子發佈在SO上,你是否拿出了其他可能相關的代碼?基於你提供的所有信息,應該是

旁註:當我碰到像這樣的錯誤時,我會去做一些物理的事情。通常當我回來時我的頭很清楚,我立即發現問題。你可能也想嘗試一下! :D

+0

第一個問題:DUH。是的。謝謝。 第二個問題。不,沒有財產...我將代碼從實際程序中複製出來(我在程序中簡化了它,用於調試,但這是當前狀態...),我不認爲還有其他事情發生這可能會影響... 2種方法的完整版本已發佈。 – 2010-02-17 23:07:58

+0

你從哪裏得到'doc'?如果它是一個屬性,你應該用'self.doc'來訪問它而不是變量。 – 2010-02-17 23:13:39

+0

doc只是(在本例中)AppController對象的成員字段。它* IS *調用currentOrient方法。我用調試器跟蹤它...是的,我認爲我應該做一些物理的,比如回家,吃晚飯,去睡覺,明天再回來B) – 2010-02-17 23:22:11