Есть ли в любом случае, я могу сравнить строку (которая является словом) и букву, которая вводится пользователем и получить вывод в виде BOOL

Я новичок в разработке для IOS и делаю простые программы, эта игра - палач. Я хотел выбрать случайную строку из файла plist (завершено). Теперь я хочу сравнить введенный пользователем текст (из текстового поля) и сравнить его со строкой, которую мы случайно выбрали из нашего списка.

Вот мой код для MainViewController.m, поскольку это утилита. В настоящее время используется только MainView.

#import "MainViewController.h"
#import "WordListLoad.h"
@interface MainViewController ()
@end
@implementation MainViewController
@synthesize textField=_textField;
@synthesize button=_button;
@synthesize correct=_correct;
@synthesize UsedLetters=_UsedLetters;
@synthesize newgame=_newgame;
- (IBAction)newg:(id)sender
{
[self start];
}
- (void)start
{
NSMutableArray *swords = [[NSMutableArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"swords" ofType:@"plist"]];
NSLog(@"%@", swords);
NSInteger randomIndex = arc4random() % [swords count];
NSString *randomString = [swords objectAtIndex:randomIndex];
NSLog(@"%@", randomString);


}

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

- (void)check: (NSString *) randomString;
{
//NSLogs to check if the values are being sent

NSLog(@"2 %@", self.textField.text);

}
- (IBAction)go:(id)sender
{
[self.textField resignFirstResponder];

NSLog(@"1 %@", self.textField.text);
[self check:(NSString *) self.textField];
_textField.text = nil;


}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

[self start];

}

3 ответа

Решение

Учитывая, что это игра в палач, я предполагаю, что вы пытаетесь увидеть, содержится ли одна строка в заданной строке - так что equalsToString: не будет тем, что вы хотите.

Вместо этого, вероятно, лучше использовать rangeOfString: options:

if ([randomString rangeOfString:self.textfield.text options:NSCaseInsensitiveSearch].location != NSNotFound){
    // Do stuff for when the letter was found
}
else {
    // Do stuff for when the letter wasn't found
}

Кроме того, как указал Патрик Гоули, вам нужно убедиться, что вы используете значение textfield.text для получения строки из него. То же самое с сохранением исходного слова, которое вы будете использовать в качестве скрытого слова.

Есть также несколько других незначительных проблем с кодом (например, точка с запятой в заголовке функции), которые вам необходимо устранить, чтобы иметь работающее приложение.

Редактировать: заставил диапазон строковых вызовов фактически использовать текст текстового поля и делать это без учета регистра (для предотвращения ложных возвратов, когда пользователь вводит заглавную букву, когда слово в нижнем регистре, или наоборот). Также включена ссылка на документацию по диапазону NSString: параметры:

Для сравнения 2 строки: [string1 equalsToString:string2], Это вернет истину, если строка1 равна строке2. Чтобы получить строку, содержащуюся в поле UIText: textfield.text,

Для вашего метода проверки вы отправляете само поле UIText вместо его текстовой строки. Вместо этого попробуйте:

[self check: self.textfield.text];

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

объявите в интерфейсе класса:

@property (nonatomic,strong) NSString* randomString;

в методе запуска:

self.randomString = [swords objectAtIndex:randomIndex];

в методе проверки:

return [self.randomString isEqualToString:randomString];
Другие вопросы по тегам