Iphone Obj-C在带有范围消息的子字符串上崩溃

Iphone Obj-C在带有范围消息的子字符串上崩溃,iphone,objective-c,iphone-sdk-3.0,Iphone,Objective C,Iphone Sdk 3.0,下面的代码使我的应用程序在第3行崩溃,而没有出现我可以识别或知道如何处理的错误。你知道我做错了什么吗 NSInteger *match = [str1 intValue] + [str2 intValue]; NSString *strrep = [NSString stringWithFormat:@"%i", match]; label.text = [strrep substringWithRange:NSMakeRange(1,3)]; 您需要NSInteger匹配。没有指针。(NSI

下面的代码使我的应用程序在第3行崩溃,而没有出现我可以识别或知道如何处理的错误。你知道我做错了什么吗

NSInteger *match = [str1 intValue] + [str2 intValue];
NSString *strrep = [NSString stringWithFormat:@"%i", match];
label.text = [strrep substringWithRange:NSMakeRange(1,3)];

您需要
NSInteger匹配
。没有指针。(NSInteger不是一个类,它只是
int
long
的类型定义,具体取决于编译目标。)


尽管奇怪的是,您的代码实际上可能仍然是这样工作的,因为指针本身将代替int。

如果字符串长度小于(1+3)4个字符,这将崩溃。

我建议您将第3行分成两行,以隔离问题

NSString *result = [strrep substringWithRange:NSMakeRange(1,3)];
label.text = result;

如果让我猜的话,我会说标签可能是在某个地方发布的,而您正试图分配到一个错误的位置。

特别是,
substringWithRange:
在这种情况下将引发
NSRangeException
。谢谢,但当strrep字符串长度超过4个字符时,它也会崩溃:(它是否真的给出了一个错误?它是什么?还有
标签是如何定义的?它可能是
[label setText]中的一个问题吗?)
?因此修复了您的错误?将方法链接在一起对于节省空间和提高代码可读性非常有用,但分解为多个步骤对调试有一定帮助。这几乎总是我做的第一件事。