是时候设置一个属性来将它传递给另一个viewController

时间:2016-02-11 12:42:01

标签: ios objective-c uitableview segue

我有tableViewController类,想要将属性传递给另一个视图控制器。

我宣布了我的财产,

@property (strong, nonatomic) NSIndexPath *selection;

在协议tableView:didSelectRowAtIndexPath:中,我想将selection值设置为indexPath所选。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    // change your selection property
    [self setSelection:indexPath];
}

我想通过selection

prepareForSegue:sender:传递到目标视图控制器
if ([segue.identifier isEqualToString:@"updateItem"]) {
        UINavigationController *navController = (UINavigationController *)[segue destinationViewController];
        UpdateViewController *viewController = (UpdateViewController *)[navController topViewController];

        [viewController setManagedObjectContext:self.managedObjectContext];

        NSManagedObject *record = [self.fetchResultsController objectAtIndexPath:self.selection];
        if (self.selection) {
            [viewController setRecord:record];
        }

        // reset selection
        [self setSelection:nil];
    }

我的问题是,我在目标视图控制器上对该属性进行了NSlog,并且它第一次显示为null。其次,它显示为第一个设置,依此类推等。它展示了我之前设定的内容。

所以我错过了在进入另一个视图控制器目标之前设置属性的概念吗?请让我知道这一点。任何帮助,将不胜感激。非常感谢你。

1 个答案:

答案 0 :(得分:0)

我终于找到了答案。我搞砸了如何触发segue。 prepareForSeguedidSelectRowAtIndexPath之前先运行prepareForSegue

请参阅this我们应该使用didSelectRowAtIndexPathselection。因此,我决定将prepareForSegue设置为indexPathForSelectedRow以获取其[self setSelection:[[self tableView] indexPathForSelectedRow]

embed,iframe,object,video{
    height:auto !important
}