【问题标题】:Passing Data from TableView to ViewController将数据从 TableView 传递到 ViewController
【发布时间】:2015-05-08 10:24:13
【问题描述】:

我正在尝试将数据从表视图发送到 viewController,但它一直在崩溃。这是我所做的:

准备转战

if ([segue.identifier isEqualToString:@"detailSegue"]){
    DetailView *dv = [segue destinationViewController];
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
    dv.stringForFirstLabel = [_cell.firstArray objectAtIndex:indexPath.row]
 }

但它记录了这个

: 无法识别的选择器发送到实例。

【问题讨论】:

  • 在哪种方法上?...
  • 确保您在故事板中正确命名了 segue,并且该名称与您在执行 segue 时输入的名称匹配。
  • _cell 看起来有点奇怪。那是什么?
  • 它通常也会记录,哪个实例没有识别选择器。请也分享一下。
  • 请尝试指定有关您的代码的详细信息。例如,没有办法理解什么是_cell。其次,尝试复制粘贴确切的代码,您正在尝试。例如,第一行是 if ([segue.identifier isEqualToStrinf:@"detailSegue"]){ 它本身应该给出编译时错误,因为没有称为 isEqualToStrinf 的方法。

标签: ios objective-c iphone ios8


【解决方案1】:

可能是因为你调用了方法isEqualToStrinf,它应该是isEqualToString

【讨论】:

  • NSString 接口下没有名为 isEqualToStrinf 的方法或选择器。 @Udondan 是对的。 [segue.identifier isEqualToStrinf:@"detailSegue"] 应该会导致编译时错误。
  • 如果是这样的话,它会给出编译时错误,而不是崩溃。
  • isEqualToStrinf 只是一个错字
  • 我只想将 UITableViewCell 内部的字符串传递给详细视图,但如果 tableView 中有多个单元格,它运行完美,但是当我选择一个单元格并转到详细视图时我传递的字符串等于 tableView 中的最后一个单元格,无论我选择第二个单元格还是第三个单元格,字符串都将等于最后一个单元格。这就是我要解决的问题。
  • 那是相关信息。请相应地更新原始问题。
【解决方案2】:

我试图根据您的 cmets 拼凑一些想法(不幸的是,您的问题措辞和结构都很糟糕):

我假设您正在尝试将所选表格视图单元格的标签文本传递给详细视图控制器。

我认为一个干净的实现如下:

您有一个字符串数组属性,用作您在viewDidLoad 中设置的表格视图单元格的数据源:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.myStrings = @[@"Title 1", @"Title 2", @"Title 3"];
}

所以在cellForRowAtIndexPath: 中,您可以将单元格的titleLabel 属性的文本设置为给定项目,例如:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    // ...

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"identifier"];
    cell.titleLabel.text = self.myStrings[indexPath.row];

    // ...

    return cell;
}

然后在prepareForSegue,可以查询选中的索引:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Make sure your segue name in storyboard is the same as this line
    if ([[segue identifier] isEqualToString:@"detailSegue"])
    {
        DetailView *dv = [segue destinationViewController];
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        NSString *text = self.myStrings[indexPath.row];

        dv.stringForFirstLabel = text;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多