在方法中,我有以下代码:
NSString* tempString = (NSString*)arg;
NSArray* notificationDetails = [tempString componentsSeparatedByString:@"##"];
NSString* tempString1 = [notificationDetails objectAtIndex:2];
.
.
.
.
.
.
NSLog(tempString1);
当我编译代码时,它的编译没有任何错误和警告。 但是在运行时(在带有断点的调试模式下)它在NSLog语句中崩溃。 我遇到的麻烦是在获取“[notificationDetails objectAtIndex:2];”时 解决方案是什么。
答案 0 :(得分:6)
使用...
NSLog(tempString1);
......很危险。虽然看起来NSLog会接受任何字符串作为其唯一参数,但实际上调用的实际函数的定义清楚地表明第一个参数在内部被解析为格式字符串。
void NSLogv (
NSString *format,
va_list args
);
这意味着字符串中具有格式含义即“%”的任何字符都将被视为格式化而不是字符。因此,如果您尝试传递字符串,“销售40%的折扣”NSLog将查找参数并在找不到它们时崩溃。
答案 1 :(得分:1)
使用
NSLog(@"%@", tempString1);
答案 2 :(得分:0)
notificationDetails包含多少个元素? 使用以下代码找出: NSLog(@“%d个元素”,[notificationDetails count]);
arg是一个字符串吗? NSLog(@“arg类是%@”,[arg类]);
答案 3 :(得分:0)
另一种可能性,取决于省略号的长度:componentsSeparatedByString:返回一个自动释放的数组。但我认为组件不足。