我遇到NSLog方法和一些对象的问题。我的对象返回一个NSString *,但该字符串与其他几个字符串连接起来:
-(NSString*) identiteSimple
{
NSString *res = [[NSString alloc] initWithString:prenom];
res = [res stringByAppendingString:@" "];
res = [res stringByAppendingString:nom];
return res;
}
然而,当我尝试使用NSLog打印它时:
NSLog([myObj identiteSimple]);
Xcode警告我:
“格式字符串不是字符串文字(可能不安全)”
没有打印出来。有谁知道为什么NSString没有被打印出来?
答案 0 :(得分:4)
你应该尝试:
NSLog(@"%@", [myObj identiteSimple]);
答案 1 :(得分:4)
根据您对其他答案的评论,您实际上并没有为Personne
对象分配内存。
Personne *moi = [moi initWithName:@"Lennon" prenom:@"John" civilite:@"Mr"];
当您尝试拨打moi
时, nil
为initWithName:prenom:civilite:
。发送给nil
的邮件不执行任何操作并返回nil
,因此moi
仍为nil
,identiteSimple
也会在您致电nil
时返回NSLog()
{1}}。
答案 2 :(得分:1)
首先,您正在泄漏res
的内存。您正在分配它,然后将其指向新字符串而不释放已分配的字符串。
NSString *res = [[NSString alloc] initWithString:prenom]; // after this line res points to new string, leaking previous alloced memory res = [res stringByAppendingString:@" "];
而不是分配你应该在这里创建自动释放的字符串。
NSString *res = [NSString stringWithString:prenom]; res = [res stringByAppendingString:@" "]; res = [res stringByAppendingString:nom];
甚至beteter:
return [NSString stringWithFormat:@"%@ %@", prenom, nom];
我猜不打印是prenom
或nom
不是有效的NSString。你也应该发布他们的代码。您可以通过在每个新字符串后检查res
进行调试,以找出其中断的位置。
这样的事情:
NSString *res = [NSString stringWithString:prenom]; NSLog(prenom); // prenom is OK NSLog(res); // res is OK here res = [res stringByAppendingString:@" "]; NSLog(res); // res is OK here too res = [res stringByAppendingString:nom]; NSLog(nom); // nom is OK NSLog(res); // final content of res
希望它有所帮助。