stringWithFormat BAD ACCESS中的十六进制

时间:2012-05-10 10:22:08

标签: objective-c macos cocoa

以下是我的代码的一部分:

我有一个字符串,由stringWithFormat形成,如下所示:

NSString * DestChoice = [NSString stringWithFormat:@"%@", Dest1String];

Dest1String的形成如下:

NSString * Dest1String = [NSString stringWithFormat:@"%lX", [Dest1OutField integerValue]];

Dest1OutField是NSTextField

当我在文本字段中输入“10”时,DestChoice字符串会产生“A”,因此我的代码正常工作。 当我在文本字段中输入“11”时,DestChoice字符串会产生“B”,这也很好。 但如果加上“31”我应该得到“1F”,但我有一个“EXC_BAD_ACCESS”崩溃......

我不明白......如果有人可以点亮我的路......:)

提前吃完!


编辑:

所以,我总是卡住...... 我编辑了我的代码“更容易理解”,并且我给出了我使用的确切代码,而不是样本:

所以,我做了两个这样的字符串:

DestChoice = [NSString stringWithFormat:@"%lX", [DestField integerValue]];
SourceChoice = [NSString stringWithFormat:@"%lX", [SourceField integerValue]];

因此用户以十进制值写入Source / Dest,但是它们在字符串中以十六进制形式存储,然后我有一个按钮重新格式化源和&像这样:

NSString * CommandReadyToSend  = [NSString stringWithFormat:@"X:0/%@,%@\r", DestChoice, SourceChoice];

我的代码工作正常,但是,一些值在CommandReadyToSend部分产生了EXC_BAD_ACCESS ... 示例:如果我在文本字段中写入1 =>我在DestChoice中收到1(十六进制值) 如果我在文本字段中写入10 =>我在DestChoice中收到A

但如果我在文本字段中写31,我应该得到1F,但我得到一个EXC_BAD_ACCESS ... 同样的事情29(十分值)

2 个答案:

答案 0 :(得分:0)

NSString * DestChoice = [NSString stringWithFormat:stringWithFormat:@"%@%@", Dest1String];

您表示要使用%@%@格式化两个对象,但您只提供一个对象(Dest1String)。

答案 1 :(得分:0)

我看到你的代码唯一的问题是

NSString * DestChoice = [NSString stringWithFormat:stringWithFormat:@"%@", Dest1String];

相反,您可以使用

NSString * DestChoice = [NSString stringWithString:@"%@", Dest1String];

除此之外,没有问题。我得到了正确的结果。