Нужно ли использовать 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 ответа
Этот ответ дает несколько догадок:
input
текстовое поле содержит букву, введенную пользователем для текущего предположения.word
Метка показывает текущее состояние выставленного слова, когда пользователь делает свои предположения.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
такое слово должен угадывать пользователь?