2012-03-01 3 views
1

Я просто нырнул в мир программирования на платформе iOS, и я сделал свое первое приложение Hello World.Привет, мир app

Я хочу добавить дополнительные функции в приложение, чтобы узнать больше о программировании в Xcode.

Вкратце, приложения добавляют ввод, который вы указали в текстовом поле @ hallo, и если вы вставляете ничего, это говорит Hello World !. (Он добавляет World!)

Теперь я хочу, чтобы приложение распознало определенный вход, поэтому, если я ввожу определенное имя (Kim), оно не дает стандартного ответа «привет Ким!». но, например, hello Girl !.

Это код, который добавляет «мир!». после «привет», если вы допустили ввод пустым, поэтому я решил, что это место для добавления дополнительного кода для дополнительной функции.

Это код, который я говорю о том, в HellowWorldViewController.m

- (IBAction)changeGreeting:(id)sender { 

    self.userName = self.textField.text; 

    NSString *nameString = self.userName; 
    if ([nameString length] == 0) { 
     nameString = @"World"; 
    } 

    NSString *greeting = [[NSString alloc] initWithFormat:@"Hello, %@!", nameString]; 
    self.label.text = greeting; 
} 

Это то, что я придумал:

- (IBAction)changeGreeting:(id)sender { 

    self.userName = self.textField.text; 

    NSString *nameString = self.userName; 
    if ([nameString length] == 0) { 
     nameString = @"World"; 
    } 
    if (String == "Kim") { 
     nameString = @"Girl"; 
    } 

    NSString *greeting = [[NSString alloc] initWithFormat:@"Hello, %@!", nameString]; 
    self.label.text = greeting; 
} 

Я получаю две ошибки «Ожидаемое выражение» и «Использование необъявленный идентификатор 'Строка', вы имели в виду 'NSString'

ответ

3

Изменение:

?

к:

if ([nameString isEqualToString:@"Kim"]) { nameString = @"Girl"; } 

У вас есть две проблемы:

String ничего к вашей программе не означает, что нет ни одной переменной или класс называется строкой. Вы, вероятно, просто имели в виду nameString.

Строки нужно сравнивать по-разному с использованием ==, поэтому вместо этого используйте isEqualToString.

== проверяет подлинность. То есть оба объекта являются одним и тем же объектом и указывают на один и тот же адрес в памяти.

isEqualTo по умолчанию делает то же самое, но может быть переопределен для выполнения различных сравнений равенства. isEqualToString как раз так, но еще более явным.

Это может быть не единственная проблема с вашим кодом, но это самый очевидный из тех, что я нашел.

@Jim нашел еще одну проблему: Строки в объективе-c начинаются с символа @.

+0

thx James, ваш код сделал это и спасибо за ясное объяснение – user1242574

+0

Нет проблем. Пожалуйста, не забудьте отметить мой ответ как правильный, если вы считаете его наиболее полезным. –

0

Строка == "Ким"

У вас есть Струнный определение переменной где-нибудь?

1
if (String == "Kim") { 

С этой линией существует несколько проблем.

Строковые литералы в Objective-C имеют формат @"foo" - вам не хватает @.

Вы, кажется, хотите сравнить nameString с @"Kim", но вы просто используете String. Это не имя переменной, которую вы используете.

Вы не можете сравнивать экземпляры NSString с == - это объекты, и все, что вы делаете, это сравнение адресов памяти указателей. Чтобы сравнить строки, вы должны использовать метод isEqualToString: одной из строк. Например:

if ([nameString isEqualToString:@"Kim"]) { 
Смежные вопросы