Objective-C: сравнение обычных строк и строк, найденных в NSMutableArrays

#iphone #objective-c #cocoa-touch #nsmutablearray #nsarray

#iPhone #objective-c #cocoa-touch #nsmutablearray #nsarray

Вопрос:

Я запутался в строках (боюсь, проблема новичка):

У меня есть один NSMutableArray под названием Notebook. В позиции индекса 1 у меня есть объект, который, как я думаю, является строкой. По крайней мере, я поместил это в массив следующим образом:

 [NoteBook replaceObjectAtIndex:1 withObject:@"x-x-x-x"];
  

Пока все хорошо. Если я помещу это в UILabel, на моем экране будет отображаться x-x-x-x. Кошмар начинается, когда я пытаюсь сравнить эту строку с другими строками. Давайте рассмотрим, что я не хочу отображать строку x-x-x-x на своем экране, а просто хочу, чтобы вместо нее был пробел. Итак, я подумал, что смогу достичь этого, закодировав это:

     NSString *tempDateString;
tempDateString = [NSString stringWithFormat:@"%@",[NoteBook objectAtIndex:1]];

if (tempDateString == @"x-x-x-x") {

        UISampleLabel.text = @"";

    }
  

По какой-то причине это не работает, т. Е. даже если строка в позиции 1 моего массива равна ‘x-x-x-x’, она все равно не установит для моего UISampleLabel значение nothing.

Я полагаю, что я путаюсь с маркерами @»». Когда они мне действительно нужны? Почему я не могу просто кодировать tempDateString = [NoteBook objectAtIndex:1]; без форматирования?

Любая помощь и предложения были бы очень признательны!

Ответ №1:

Вам нужно сравнить строку с isEqualToString:

 if ([tempDateString isEqualToString:@"x-x-x-x"]) {
  UISampleLabel.text = @"";
}
  

Ответ №2:

В дополнение к вопросу, на который был дан ответ:

Почему я не могу просто кодировать tempDateString = [NoteBook objectAtIndex:1]; без форматирования?

Вы можете. Как вы думаете, почему вы не можете?

Комментарии:

1. Вы можете. Но имейте в виду, что экземпляр, который вы получаете из objectAtIndex:1, является объектом автоматического выпуска. Вы должны сохранить его, если хотите использовать вне метода. 😉

2. Спасибо, но то же самое верно и для экземпляра, возвращенного из stringWithFormat: . Кроме того, я спрашиваю не ради собственной выгоды — я спрашиваю n.evermind, почему он считает stringWithFormat: , что это требуется в приведенном выше. Его ответ может выявить неправильное представление, которое мы можем помочь устранить.

3. Спасибо за ваши комментарии. На самом деле, я все еще в замешательстве из-за @»» . Я думал, мне это нужно, чтобы указать, что мы имеем дело со строкой, не так ли? Есть ли разница, объявляю ли я что-то с помощью stringWithFormat или нет?

4. Нет, в конечном результате нет разницы — в любом случае, это строковый объект. @»» — это просто удобный ярлык, который позволяет объявлять буквальные строковые значения прямо в вашем коде. stringWithFormat: полезно, когда вы хотите отформатировать кучу материала в строку, как в someString = [NSString stringWithFormat:@"This:%d That:%d The other:%@", this, that, theOther] . Обратите внимание, что строка формата, которую вы создаете с помощью @»», является таким же экземпляром NSString, как и любой другой.