2010-11-15 58 views
0

我有一個問題,獲取已從浮動轉換的字符串顯示在UITableView自定義單元格中的標籤。iPhone程序崩潰浮動到字符串轉換

如果我嘗試將float的值賦給標籤,程序將會崩潰。如果我離開「strAIAreaIncrease = @」6.5%「;」取消註釋,程序工作正常 - 但沒有計算的值。

strAIAreaIncrease = [NSString stringWithFormat:@"%.2f",fltAreaIncrease]; 
strAIAreaIncrease = [strAIAreaIncrease stringByAppendingString:@"%"]; 
DebugLog(@"The value of float num is %.2f", fltAreaIncrease); 
DebugLog(@"The value of the string is %@", strAIAreaIncrease); 
// strAIAreaIncrease = @"6.5%"; 

調試器控制檯顯示以下內容:

2010-11-14 19:52:38.122 Building Use[855:207] The value of float num is 2.50 
2010-11-14 19:52:38.123 Building Use[855:207] The value of the string is 2.50% 

我已經使用其他自定義單元格標籤,這種格式沒有問題。任何人都知道發生了什麼?

謝謝。

+0

沒有[足夠的信息](http://tinyurl.com/so-hints)。你如何分配浮標到標籤?你是如何定製細胞的?你的代碼是否與標準表格單元一起工作?墜機的原因是什麼?什麼是堆棧跟蹤? (最後兩個可以在[crash logs](http://developer.apple.com/library/ios/#technotes/tn2008/tn2151.html)中找到,[可以通過管理器訪問](http:// stackoverflow 。com/questions/2275190/iphone-app-crash-logs))我們真正需要的是[最小測試用例](http://sscce.org/)。 – outis 2010-11-15 01:43:30

+0

「你如何給標籤分配一個浮點數?」 - 這對我來說是整個問題。我試圖將float更改爲一個字符串,以便在標籤中讀取它。這種方法已經與同一個程序中的其他單元一起工作,但有足夠的來回程序會崩潰。我認爲這是由於我在不斷更新字符串時所讀到的內存泄漏。我仍然在瞭解崩潰日誌,並會更深入地考慮您的建議。謝謝。 – Aikitect 2010-11-21 12:53:21

回答

0

我認爲你應該使用NSMutableString來代替:

例如,

NSMutableString* straIAreaIncrease 
    = [NSMutableString stringWithFormat:@"%.2f", fltAreaIncreas]; 
[strAIAreaIncrease appendString:@"%%"]; 
+0

感謝您的回覆。我還沒有嘗試過,但我正在學習NSMutableString。如果我目前閱讀的內容是真的,那麼我可能會有很多NSStrings切換到NSMutableStrings。這也可以解釋我最近遇到的其他一些異常情況。這可能需要幾天時間才能實施,我會報告結果。 – Aikitect 2010-11-15 01:40:20

+0

@ user484340(你可能想[給自己一個有意義的名字](http://tinyurl.com/so-hints):由於該應用程序不會與'strAIAreaIncrease = @「6.5%」'崩潰,所以我非常懷疑切換到'NSMutableString'會有所幫助,但我不能說沒有看到更完整的代碼示例和崩潰原因和堆棧跟蹤。是否使用'NSString'或'NSMutableString'取決於您是否需要能夠改變字符串的內容,使用哪個常常是效率而不是正確的問題 – outis 2010-11-15 05:45:49

+0

好吧,我現在有一個更好的名字,我是iPhone編程的新手,並不是專業人員 - 我學習了使用Visual Basic編程。對字符串和數組進行了大量的值更改,並且在整數和浮點數之間進行了大量的轉換。我一直在尋找一種方法來跟蹤崩潰的原因,並且您給了我一個線索 - 尋找堆棧跟蹤,但我確實還不知道該怎麼做。謝謝。 – Aikitect 2010-11-15 12:44:41

0

OK,我試圖實現NSMutabeString沒有成功。很明顯,我錯過了對MSMutableString的一種有趣的理解。

我認爲我創建它的方式是問題的一部分。我需要能夠將該變量傳遞給幾個方法,所以我試圖在頭文件中創建它。看來我遇到的所有例子都是在方法中創建字符串。

在我的頭,我有:

NSMutableString *strAIAreaIncrease; 

我認爲這是問題的一個冒失的,我想,我需要爲它分配一個值,但我不知道怎麼樣。調試器控制檯提供了以下:

2010-11-21 07:40:40.456 Building Use[1274:207] *** Terminating app due to uncaught exception 
'NSInvalidArgumentException', reason: '+[NSMutableString string:]: unrecognized selector sent to class 0x2317c0' 

的另一個問題是:如果我然後在陣列使用MSMutableString值,並數組必須是一個MSMutable陣列?

謝謝。

+0

謝謝大家的回覆。正如一些答覆者所建議的,問題不在於字符串。但是,我學到了很多關於mutablestrings的知識,並且我將把我的許多字符串遷移到mutablestrings。真正的問題在這個問題中概述:http://stackoverflow.com/questions/4246201/setting-final-string-values-of-arrays-in-voidviewwillappear-crash-vs-uitab – Aikitect 2010-11-22 14:08:05

0

問題不在標題中。看來你正在使用

strAIAreaIncrease = [NSMutableString string:@"someString"]; 

但是在NSMutableString類中沒有方法「string:」。嘗試使用

strAIAreaIncrease = [NSMutableString stringWithString:@"someString"]; 

strAIAreaIncrease = [NSMutableString stringWithFormat:@"someString %d", someInteger]; 

關於第二個問題:不,你不必使用NSMutableArray裏,用的NSMutableString打交道時。 NSMutableArray中的「可變」意味着您可以在數組生成後添加和刪除數組中的對象。