Нужно ли использовать characterAtIndex только для строки NSString? И какова основная цель characterAtIndex?

Я пишу приложение для XCode и работаю над кодом для кнопки "Угадай", поэтому, если пользователь вводит правильную букву, эта буква появится в том месте, где длина слова в метке. Я использую characterAtIndex, но ошибка продолжает возникать, и я не совсем понимаю, в чем смысл characterAtIndex. Это мой код до сих пор.

@property (weak, nonatomic) IBOutlet UITextField *input;  //user input
@property (weak, nonatomic) IBOutlet UILabel *Guessesinc;  //number of incorrect guesses
@property (weak, nonatomic) IBOutlet UILabel *word;  //the state of word as the user is guessing
@property (weak, nonatomic) NSString *rndw;  //the correct and unknown word 

- (IBAction)Guess;

- (IBAction)Guess
{
    bool match = NO;

    NSRange inputRange;
    char charinput = [input characterAtIndex: 0]; 

    for(int i = 0; i < self.rndw.length; i++)
    {
        char tempString = [self.rndw characterAtIndex: i];
        if (charinput ==tempString)
        {
            match = YES;
            inputRange = NSMakeRange(i, 1); //location, length
            self.word.text = [self.word.text stringByReplacingCharactersInRange: inputRange withString: input];
        }

Входной символ AtIndex не работает, но я не понимаю, почему. Есть ли способ исправить эту проблему. Если этот код запускается, эта часть кода должна создать что-то вроде этого --d-. Так, например, если пользователь ввел объявление и правильное слово - код, метка слова должна выглядеть как --d-. Будет ли этот код работать для того, что он должен был сделать??

2 ответа

Решение

Этот ответ дает несколько догадок:

  1. input текстовое поле содержит букву, введенную пользователем для текущего предположения.
  2. word Метка показывает текущее состояние выставленного слова, когда пользователь делает свои предположения.
  3. rndw текущее слово, которое пользователь пытается угадать.

Учитывая эти предположения о вашем коде, ваш Guess Метод близок. Похоже, вашей самой большой проблемой является попытка получить первое письмо от input текстовое поле. Вы пытаетесь позвонить characterAtIndex: на UITextField вместо того, чтобы на поле text собственность (которая является NSString). Вы также пытаетесь заменить подстроку на UILabel,

Вот твой Guess метод с небольшими изменениями и очисткой. Также обратите внимание, что это стандартное соглашение, что имена переменных и методов начинаются с строчных букв, а имена классов начинаются с заглавных букв.

- (IBAction)guess
{
    bool match = NO;

    unichar charinput = [self.input.text characterAtIndex:0]; 

    for (NSInteger i = 0; i < self.rndw.length; i++)
    {
        char tempChar = [self.rndw characterAtIndex:i];
        if (charinput == tempChar)
        {
            match = YES;
            NSRange inputRange = NSMakeRange(i, 1); //location, length
            self.word.text = [self.word.text stringByReplacingCharactersInRange:inputRange withString:self.rndw.substringWithRange:inputRange];
        }

Эта строка:

char charinput = [input characterAtIndex: 0]; 

...неправильно.

Вход является UILabel, UILabel это не NSString, Вы, вероятно, хотите что-то вроде этого:

NSString *inputString = self.input.text;
if (inputString.length == 0) {
  return; //Don't try to fetch a character from an empty string.
}
char charinput = [input characterAtIndex: 0];

Однако даже это не имеет особого смысла, потому что input - это UILabel, поле только для отображения, а не поле ввода. Если вы пытаетесь собрать текст от пользователя, которого вы хотите UITextField или же UITextView, Для сбора единой строки текста из usr a UITextField это, вероятно, то, что вы хотите.

Также не ясно, почему вы сначала пытаетесь получить символ из индекса 0 в вашем входе UILabel, а затем попробуйте извлечь символы из строки self.rndw что вы никогда не инициализируете. Похоже rdnw такое слово должен угадывать пользователь?

Другие вопросы по тегам