1

在一种方法中,我有以下代码:

NSString* tempString = (NSString*)arg;
NSArray* notificationDetails = [tempString componentsSeparatedByString:@"##"];
NSString* tempString1 = [notificationDetails objectAtIndex:2];
.
.
.
.
.
. 
NSLog(tempString1);

当我编译代码时,它的编译没有任何错误和警告。但是在运行时(在带有断点的调试模式下)它在 NSLog 语句处崩溃。我看到的问题是在获取“[notificationDetails objectAtIndex:2];”时 这个有什么解决办法。

4

4 回答 4

6

使用...

NSLog(tempString1);

……很危险。虽然看起来 NSLog 将接受任何字符串作为其唯一参数,但实际上调用的实际函数的定义清楚地表明,第一个参数在内部被解析为格式字符串。

void NSLogv (
   NSString *format,
   va_list args
);

这意味着字符串中任何具有格式含义的字符,即“%”,都将被视为格式,而不是字符。因此,如果您尝试传递字符串,“sale 40% off” NSLog 将查找参数并在找不到参数时崩溃。

于 2009-12-19T19:32:46.453 回答
1

利用

NSLog(@"%@", tempString1);

于 2009-12-19T16:37:15.797 回答
0

notificationDetails 包含多少个元素?使用以下代码找出: NSLog(@"%d 个元素", [notificationDetails count]);

arg 是一个字符串吗?NSLog(@"类 arg 是 %@", [arg 类]);

于 2009-12-19T16:40:36.800 回答
0

另一种可能性,取决于省略号的长度: componentsSeparatedByString: 返回一个自动释放的数组。但我猜组件不足。

于 2009-12-19T19:55:22.547 回答