gpt4 book ai didi

ios - NSInvalidArgumentException-无法识别的选择器发送到实例? UITextView/UIPickerView

转载 作者:行者123 更新时间:2023-12-01 19:08:11 26 4
gpt4 key购买 nike

我试图建立一个文本字段,用用户输入填充pickerView。每次启动应用程序时,我都会收到此错误:

NSInvalidArgumentException', reason: '-[UITextField isEqualToString:]: unrecognized   selector sent to instance.

@synthesize pickerView;
@synthesize textArray;
@synthesize textField;

- (void)viewDidLoad
{
[super viewDidLoad];

self.textArray = [[NSMutableArray alloc] init];

PFUser *currentUser = [PFUser currentUser];
if (currentUser) {
NSLog(@"Current user: %@" , currentUser.username);
}
else {
[self performSegueWithIdentifier:@"showLogin" sender:self];
}
self.textField.delegate = self;

self.pickerView.dataSource = self;
self.pickerView.delegate = self;

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];

[nc addObserver:self selector:@selector(keyboardWillShow:) name:
UIKeyboardWillShowNotification object:nil];

[nc addObserver:self selector:@selector(keyboardWillHide:) name:
UIKeyboardWillHideNotification object:nil];

self.tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(didTapAnywhere:)];
}

-(void)didTapAnywhere: (UITapGestureRecognizer *) note {
[self.textField resignFirstResponder];
}
-(void) keyboardWillShow:(NSNotification *) note {
[self.view addGestureRecognizer:self.tapRecognizer];
}

-(void) keyboardWillHide:(NSNotification *) note
{
[self.view removeGestureRecognizer:self.tapRecognizer];
}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: (NSInteger)component
{
if ([self.textArray count] == 0)
return 1;
return [self.textArray count];
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent: (NSInteger)component {
return [self.textArray objectAtIndex:row];
}

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row forComponent: (NSInteger)component{
NSLog(@"You selected this: %@", [self.textArray objectAtIndex:row]);
}

-(void)textFieldDidEndEditing:(UITextField *)textField{

[self.textArray addObject:self.textField.text];

[self.textField resignFirstResponder];

}

- (IBAction)logout:(id)sender {
[PFUser logOut];
[self performSegueWithIdentifier:@"showLogin" sender:self];
}
@end

我对所有事物都是新手,因此,如果这很简单,请放轻松吧。干杯!

最佳答案

您必须在收到此错误

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row  forComponent:(NSInteger)component {
return [self.textArray objectAtIndex:row];
}

当您返回文本字段而不是text(title)时。

viewDidLoad中,更改以下行:
[self.textArray addObject:self.textField];


[self.textArray addObject:self.textField.text];

确保有一些文本,因此标题不会返回空。那么,您实际上是想放入数组中的什么?是文本还是文本字段?

编辑

首先,我看到的是缺少 文本字段代表。在viewDidLoad中设置 self.textField.delegate = self;,以便调用textFieldDidEndEditing。在其中重新加载pickerview,以便可以使用当前文本正确填充它。
-(void)textFieldDidEndEditing:(UITextField *)textField{

[self.textArray addObject:self.textField.text];

[self.pickerView reloadAllComponents];

}

对于选择器标题,当数组中没有数据时,您将返回1。您应该返回注释中所述的内容。
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:   (NSInteger)component {

if(self.textArray.count == 0)
return @"There is nothing";
else
return [self.textArray objectAtIndex:row];
}

确保关闭键盘,当用户按下“输入键”时,您应该在调用 [self.textfield resignFirstResponder]。用文本框连接一些方法,例如“hidekeyboard”。
-(IBAction) hidekeyboard:(id) sender

{
[sender resignFirstResponder];
}

希望对您有帮助。

关于ios - NSInvalidArgumentException-无法识别的选择器发送到实例? UITextView/UIPickerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18522184/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com