无法将字符串传递给另一个控制器

时间:2014-02-16 10:36:44

标签: ios objective-c

我有一个具有表视图控制器和详细视图控制器的应用程序。我想将一个字符串的值传递给详细控制器中的另一个字符串。我正在使用故事板,事实上,当我没有使用它时,它工作,但在另一个app.Im堆叠在这里,无法理解我做错了什么。有我的代码:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    DetailViewController     *detailController = [[DetailViewController alloc]init];
    detailController.descriptionStringShort = [[self.listOfPlaceDetails objectAtIndex:indexPath.row]objectForKey:@"description"];
    NSLog(@"%@", [[self.listOfPlaceDetails objectAtIndex:indexPath.row] objectForKey:@"description"]);

}

在控制台中,当我点击行(在第一个表控制器中)时,我可以看到值,但是当我推到另一个视图时,我只能在控制台中看到nil:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.myScrollView.contentSize = CGSizeMake(320, 960);
    self.myTextView.text = self.descriptionStringShort;
    [self.myScrollView addSubview:self.myTextView];
    NSLog(@"%@ descriptor", self.descriptionStringShort);

}

控制台中没有。我做错了什么?

任何建议都将不胜感激,谢谢!

3 个答案:

答案 0 :(得分:2)

使用segues时,不应创建DetailedViewController的新实例。

实施方法prepareForSegue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"YourSegueID"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
        NSString *string = [[self.listOfPlaceDetails objectAtIndex:indexPath.row]objectForKey:@"description"];
        DetailedViewController *DVC = segue.destinationViewController; //Might need a cast
        DVC.descriptionStringShort = string;
       }
}

注意:此代码未经过类型检查,但是,它应该让您了解如何执行此操作。

答案 1 :(得分:1)

我怀疑你可能在这里创建了两个单独的“DetailViewController”对象。

您的故事板中的一个,以及您通过代码中的“alloc”和“init”明确创建的一个。

此外,视图控制器通常使用"initWithNibName:bundle"初始化程序创建。

答案 2 :(得分:1)

看起来你正在配置错误的对象。

tableView:didSelectRowAtIndeXPath:中,您创建了一个DetailViewController并对其进行了配置,但这与您正在使用的DetailViewController的实例不同。您正在配置的实例实际上将在方法结束时消失,因为ARC将看不到其他对象具有强保留。

这相当于给银行打电话,给他们所有细节要求贷款,然后再打电话给另一家银行,并希望他们根据你给第一家银行的详细信息给你报价。记住您必须配置要使用的特定对象

始终很重要

您需要配置在segue期间获得的DetailViewController实例