【问题标题】:iPhone program crash on float to string conversioniPhone程序在浮点到字符串转换时崩溃
【发布时间】:2012-06-13 22:41:11
【问题描述】:

我在获取已从浮点数转换为显示在 UITableView 的自定义单元格中的标签中的字符串时遇到问题。

如果我尝试将浮点值分配给标签,程序将会崩溃。如果我离开 "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] float num 的值为 2.50
2010-11-14 19:52:38.123 Building Use[855:207] 字符串的值为 2.50%

我在其他自定义单元格标签上使用了这种格式,没有问题。有人知道发生了什么吗?

谢谢。

【问题讨论】:

  • 几乎没有enough information。如何为标签分配浮点数?你是如何定制细胞的?您的代码是否适用于标准表格单元格?坠机原因是什么?堆栈跟踪是什么? (最后两个可以在crash logsaccessible via the Organizer找到)我们真正需要的是minimal test case
  • "如何为标签分配浮点数?" - 这就是我的全部问题。我正在尝试将浮点数更改为字符串,以使其在标签中读出。这种方法已经在同一个程序中的其他单元格上工作了,但是如果来回足够多,程序就会崩溃。我认为这是由于我在不断更新字符串时读到的内存泄漏。我仍在了解崩溃日志,并将更深入地研究您的建议。谢谢。

标签: iphone string crash floating-point


【解决方案1】:

我认为你应该改用 NSMutableString:

例如

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

【讨论】:

  • 感谢您的回复。我还没有尝试过,但我正在学习 NSMutableString。如果到目前为止我所读的是真的,那么我可能有很多 NSStrings 可以切换到 NSMutableStrings。这也可以解释我最近遇到的其他一些异常情况。我可能需要几天的时间才能实现这个,我会报告结果。
  • @user484340(你可能想give yourself a meaningful name:因为应用程序不会因strAIAreaIncrease = @"6.5%"而崩溃,我非常怀疑切换到NSMutableString会有所帮助,尽管我不能肯定地说没有查看更完整的代码示例以及崩溃原因和堆栈跟踪。是否使用NSStringNSMutableString 取决于您是否需要能够更改字符串内容。使用哪个通常是效率问题而不是比正确性。
  • 好的,我现在有了一个更好的名字。我是 iPhone 编程的新手,不是专业人士——我是用 Visual Basic 学习编程的。我正在对字符串和数组的值进行大量更改,以及在整数和浮点数到字符串之间来回进行大量转换。我一直在寻找一种方法来跟踪崩溃的原因,你给了我一个线索——寻找堆栈跟踪,但我还不知道该怎么做。谢谢。
【解决方案2】:

好的,我尝试实现 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 数组?

谢谢。

【讨论】:

  • 谢谢大家的回复。正如一些受访者所建议的那样,问题不在字符串中。但是,我学到了很多关于可变字符串的知识,并且我将把我的许多字符串迁移到可变字符串。这个问题概述了真正的问题:stackoverflow.com/questions/4246201/…
【解决方案3】:

问题不在标题中。看来你正在使用

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

但是在 NSMutableString 类中没有方法“string:”。尝试使用

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

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

关于您的第二个问题:不,在处理 NSMutableString 时,您不必使用 NSMutableArray。 NSMutableArray 中的“Mutable”表示数组生成后可以添加和删除对象。

【讨论】:

    猜你喜欢
    • 2017-02-13
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 2020-04-28
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    相关资源
    最近更新 更多