NSLog NSString * print не печатает - PullRequest
1 голос
/ 17 марта 2011

У меня проблемы с методом 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 ]

4 голосов
/ 17 марта 2011

Исходя из ваших комментариев к другим ответам, вы фактически не выделяете память для вашего Personne объекта.

Personne *moi = [moi initWithName:@"Lennon" prenom:@"John" civilite:@"Mr"];

moi равно nil при попытке вызвать initWithName:prenom:civilite:.Сообщения на nil ничего не делают и возвращают nil, поэтому moi по-прежнему будет nil, а identiteSimple также возвратит nil при вызове NSLog().

4 голосов
/ 17 марта 2011

Вы должны попробовать:

NSLog(@"%@", [myObj identiteSimple]);
1 голос
/ 17 марта 2011

Прежде всего, вы теряете память на res. Вы выделяете это, затем указываете на новую строку, не освобождая выделенную.

NSString *res = [[NSString alloc] initWithString:prenom];

// after this line res points to new string, leaking previous alloced memory
res = [res stringByAppendingString:@" "];  

Вместо alloc вы должны создать здесь автоматически освобожденную строку.

NSString *res = [NSString stringWithString:prenom];
res = [res stringByAppendingString:@" "];
res = [res stringByAppendingString:nom];

Или даже лучше:

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

Надеюсь, это поможет.

...