ios - 将数据传递给下一个 ViewController 时出错

标签 ios objective-c uiviewcontroller nsstring uistoryboard

我正在尝试在 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 ...

中得到 UIViewController

更正 Storyboard中的类名称。

然后,更改字符串管理,这样就不会重复创建新字符串(即删除 stringWithString: 用法)并更改此属性:

@property (assign) NSString *courseToSearch;

@property (strong) NSString *courseToSearch;

因为您应该保留(或复制)对象。

关于ios - 将数据传递给下一个 ViewController 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22732862/

相关文章:

ios - 如何使用自动布局为纵向和横向配置不同的布局?

ios - block 方法完成后执行方法

objective-c - 让多个 NSScrollView 同时滚动

ios - 在当前 View Controller 中关闭以前的模态视图 Controller

ios - 在 TabBarController 中到达 ViewController

ios - 将可视格式的约束转换为 NSLayoutAnchor API

ios - 一切都被正确解析,但一个元素总是拉空,即使它在 Json 中? swift 4.1

ios - 在 Storyboard中更改 UIImageView 的大小

ios - 是否可以为对象中的字典值创建 NSSortDescriptor?

iphone - UIViewController 上的两个标题栏(UITableViewController 的 subview )