NSString не будет работать в Objective C - PullRequest
0 голосов
/ 19 мая 2011

Я начинаю изучать Цель C с сегодняшнего дня. У меня есть очень маленькая программа, которая напечатает мое имя и возраст. Я получаю возраст для печати, но не имя. Вместо того, чтобы печатать имя в виде строки, он печатает число. Вот код:

#import <Foundation/Foundation.h>

@interface Person : NSObject {

    NSString *name;
    int age;

}

-(void) setAge:(int)a;
-(void) setName:(NSString*) n;

-(int)age;
-(NSString*) name;

-(void) print;

@end

@implementation Person

-(void)setAge:(int) a{
    age = a;
}

-(void)setName:(NSString*) n{
    [n retain];
    [name release];
    name = n;
}

-(int)age{
    return age;
}

-(NSString*) name{
    return name;
}

-(void) print{
    NSLog(@"I'm %i, i'm %i years old", name, age);
}

@end

int main (int argc, char *argv[]){
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]init];

    Person *p = [[Person alloc]init];

    [p setAge: 26];
    [p setName: @"Johnny"];
    [p print];

    [pool drain];
    return 0;
}

Отсюда я получаю этот отпечаток: мне 4176, мне 26 лет. Почему я получаю 4176? Я не понимаю: (

Заранее спасибо

Ответы [ 2 ]

5 голосов
/ 19 мая 2011

Используя строку формата %i, вы сообщаете NSLog, что хотите напечатать целое число, и оно печатает адрес в памяти строки (то есть значение указателя name). Измените форматную строку, указав, что вы хотите напечатать строковое представление объекта, на который указывает name, используя %@:

NSLog(@"I'm %@, i'm %i years old", name, age);
0 голосов
/ 19 мая 2011

Как ты это печатаешь? Держу пари, что вы печатаете неправильно. Попробуйте напечатать это в журнале, как это

   NSLog(@"I'm %@, i'm %d years old", name, age);

Ее таблица на случай, если у кого-то возникнут такие же проблемы Таблица форматирования NSString

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...