NSLog NSString *打印不打印

时间:2011-03-17 18:15:30

标签: objective-c nsstring nslog

我遇到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没有被打印出来?

3 个答案:

答案 0 :(得分:4)

你应该尝试:

NSLog(@"%@", [myObj identiteSimple]);

答案 1 :(得分:4)

根据您对其他答案的评论,您实际上并没有为Personne对象分配内存。

Personne *moi = [moi initWithName:@"Lennon" prenom:@"John" civilite:@"Mr"];
当您尝试拨打moi时,

nilinitWithName:prenom:civilite:。发送给nil的邮件不执行任何操作并返回nil,因此moi仍为nilidentiteSimple也会在您致电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];

我猜不打印是prenomnom不是有效的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

希望它有所帮助。