我正在尝试在 ViewController 之间传递数据。数据字符串是从 UIPickerView
中获取的。但是,我收到一个错误。首先,这是我填充 UIPickerView
的地方。
- (IBAction)btnClick:(id)sender
{
NSDictionary *courseNames;
if(![_txtBox.text isEqual:@""]) //if not empty
{
courseNames = [self retrieveCourseNamesForSemester:_txtBox.text];
for (NSString *key in courseNames)
{
NSString *val = [NSString stringWithFormat:@"%@: %@",key,[courseNames objectForKey:key]];
if([courseArray count]==0)
{
courseArray = [NSMutableArray arrayWithObject:val];
}
else
{
[courseArray addObject:val];
}
}
[_coursePicker reloadAllComponents];
_coursePicker.hidden=false;
}
[_txtBox resignFirstResponder];
}
这是我尝试将数据传递给第二个 ViewController
(GradesViewController
) 的方式:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
GradesViewController *controller = segue.destinationViewController;
@try
{
[controller setCourseToSearch:[NSString stringWithString:selectedCourse]];
}
@catch (NSException *exception)
{
NSLog(@"%@ --- %@",exception, selectedCourse);
if([selectedCourse isKindOfClass:[NSString class]])
{
NSLog(@"it IS a string");
}
else
{
NSLog(@"it is NOT a string");
}
}
}
最后,这是我设置 selectedCourse
的地方:
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
selectedCourse = [NSString stringWithString:[courseArray objectAtIndex:[pickerView selectedRowInComponent:0]]];
}
GradesViewController
中的属性定义如下:
@property (assign) NSString *courseToSearch;
prepareForSegue
中的异常处理输出如下:
2014-03-29 11:00:08.292 WebServiceTest[46154:60b] -[UIViewController setCourseToSearch:]: unrecognized selector sent to instance 0xe29ac60 --- 43-214: Course Name
2014-03-29 11:00:08.292 WebServiceTest[46154:60b] it IS a string
为什么在发送 NSString 时提示我发送了“无法识别的选择器”?赋值 selectedCourse = [NSString stringWithString:[courseArray objectAtIndex:[pickerView selectedRowInComponent:0]]];
是否应该确保它是一个 NSString
?
最佳答案
问题不在于字符串,而在于你的 Storyboard,因为你没有设置正确的 View Controller 类。这就是为什么你在 -[UIViewController setCourseToSearch:]: unrecognized ...
更正 Storyboard中的类名称。
然后,更改字符串管理,这样就不会重复创建新字符串(即删除 stringWithString:
用法)并更改此属性:
@property (assign) NSString *courseToSearch;
至
@property (strong) NSString *courseToSearch;
因为您应该保留(或复制)对象。
关于ios - 将数据传递给下一个 ViewController 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22732862/