Ios 设置另一个UIViewController的属性

Ios 设置另一个UIViewController的属性,ios,properties,uiviewcontroller,parameter-passing,Ios,Properties,Uiviewcontroller,Parameter Passing,在我的DetailViewController.h中,我声明了属性*类型,如下所示: @interface DetailViewController : UIViewController @property (strong, nonatomic) NSString *type; @end 然后我得到了一个ListViewController,它是一个包含TableView的UIViewController。 ListViewController.h如下所示: @interface Li

在我的DetailViewController.h中,我声明了属性*类型,如下所示:

@interface DetailViewController : UIViewController
    @property (strong, nonatomic) NSString *type;
@end
然后我得到了一个ListViewController,它是一个包含TableView的UIViewController。 ListViewController.h如下所示:

@interface ListViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@end
当我在这个块/函数的第二行放置断点时,我得到了detailController,其中包含*类型。 当我在几行之后记录它时,它返回“(null)”。 视图已更改,但类型未设置

我不知道我做错了什么? 有人对此有一个解决方案,或者可以给我指一些我们正在做的事情。这是怎么解释的

因为我试图搜索答案,但找不到与我的问题相同的答案,或者我使用了错误的搜索词。

这是为什么

UINavigationController * navigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailController"];
为什么要将导航控制器推入导航控制器

[self.navigationController pushViewController:navigationController animated:YES];
detailController
未使用或显示

请尝试以下方法:

[self.navigationController pushViewController:detailController animated:YES];
这是干什么用的

UINavigationController * navigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailController"];
为什么要将导航控制器推入导航控制器

[self.navigationController pushViewController:navigationController animated:YES];
detailController
未使用或显示

请尝试以下方法:

[self.navigationController pushViewController:detailController animated:YES];
这是干什么用的

UINavigationController * navigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailController"];
为什么要将导航控制器推入导航控制器

[self.navigationController pushViewController:navigationController animated:YES];
detailController
未使用或显示

请尝试以下方法:

[self.navigationController pushViewController:detailController animated:YES];
这是干什么用的

UINavigationController * navigationController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailController"];
为什么要将导航控制器推入导航控制器

[self.navigationController pushViewController:navigationController animated:YES];
detailController
未使用或显示

请尝试以下方法:

[self.navigationController pushViewController:detailController animated:YES];

看最后一行-你在告诉导航控制器推动自己

看最后一行-你在告诉导航控制器推动自己

看最后一行-你在告诉导航控制器推动自己

看最后一行-你在告诉导航控制器推动自己

应该是这样的

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    DetailViewController * detailController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailController"];

    detailController.type = @"video";

    NSLog(@"Type: %@", detailController.type);

    [self.navigationController pushViewController:detailController animated:YES];
}
应该是这样的

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    DetailViewController * detailController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailController"];

    detailController.type = @"video";

    NSLog(@"Type: %@", detailController.type);

    [self.navigationController pushViewController:detailController animated:YES];
}
应该是这样的

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    DetailViewController * detailController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailController"];

    detailController.type = @"video";

    NSLog(@"Type: %@", detailController.type);

    [self.navigationController pushViewController:detailController animated:YES];
}
应该是这样的

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    DetailViewController * detailController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailController"];

    detailController.type = @"video";

    NSLog(@"Type: %@", detailController.type);

    [self.navigationController pushViewController:detailController animated:YES];
}

导航控制器和alloc init方法是否都实例化了保存视图控制器

如果是,试试这个

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
DetailViewController * detailController = [[DetailViewController alloc] init];

detailController.type = @"video";

NSLog(@"Type: %@", detailController.type);

[self.navigationController pushViewController:detailController animated:YES];
}

导航控制器和alloc init方法是否都实例化了保存视图控制器

如果是,试试这个

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
DetailViewController * detailController = [[DetailViewController alloc] init];

detailController.type = @"video";

NSLog(@"Type: %@", detailController.type);

[self.navigationController pushViewController:detailController animated:YES];
}

导航控制器和alloc init方法是否都实例化了保存视图控制器

如果是,试试这个

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
DetailViewController * detailController = [[DetailViewController alloc] init];

detailController.type = @"video";

NSLog(@"Type: %@", detailController.type);

[self.navigationController pushViewController:detailController animated:YES];
}

导航控制器和alloc init方法是否都实例化了保存视图控制器

如果是,试试这个

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
DetailViewController * detailController = [[DetailViewController alloc] init];

detailController.type = @"video";

NSLog(@"Type: %@", detailController.type);

[self.navigationController pushViewController:detailController animated:YES];
}

didselectrowatinexpath:
方法中,更改以下行`

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

    DetailViewController * detailController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailController"];;

    detailController.type = @"video";

    NSLog(@"Type: %@", detailController.type);

    [self.navigationController pushViewController: detailController animated:YES];
}`
在序列图像板中选择
DetailViewController
,并将序列图像板id设置为“DetailController”。确保您的
ListViewController
嵌入到
UINavigationController
中,您可以通过选择
ListViewController
并转到
编辑器->嵌入->导航控制器来实现。遵循这些步骤,你的问题就会得到解决

或者,您可以将ListViewController中的segue指定给DetailViewController并使用

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSIndexPath *path = [self.tableView indexPathForSelectedRow]; //create tableview outlet
    [segue.destinationViewController setType:@"video"];
}

didselectrowatinexpath:
方法中,更改以下行`

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

    DetailViewController * detailController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailController"];;

    detailController.type = @"video";

    NSLog(@"Type: %@", detailController.type);

    [self.navigationController pushViewController: detailController animated:YES];
}`
在序列图像板中选择
DetailViewController
,并将序列图像板id设置为“DetailController”。确保您的
ListViewController
嵌入到
UINavigationController
中,您可以通过选择
ListViewController
并转到
编辑器->嵌入->导航控制器来实现。遵循这些步骤,你的问题就会得到解决

或者,您可以将ListViewController中的segue指定给DetailViewController并使用

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSIndexPath *path = [self.tableView indexPathForSelectedRow]; //create tableview outlet
    [segue.destinationViewController setType:@"video"];
}

didselectrowatinexpath:
方法中,更改以下行`

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

    DetailViewController * detailController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailController"];;

    detailController.type = @"video";

    NSLog(@"Type: %@", detailController.type);

    [self.navigationController pushViewController: detailController animated:YES];
}`
在序列图像板中选择
DetailViewController
,并将序列图像板id设置为“DetailController”。确保您的
ListViewController
嵌入到
UINavigationController
中,您可以通过选择
ListViewController
并转到
编辑器->嵌入->导航控制器来实现。遵循这些步骤,你的问题就会得到解决

或者,您可以将ListViewController中的segue指定给DetailViewController并使用

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSIndexPath *path = [self.tableView indexPathForSelectedRow]; //create tableview outlet
    [segue.destinationViewController setType:@"video"];
}

didselectrowatinexpath:
方法中,更改以下行`

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

    DetailViewController * detailController = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailController"];;

    detailController.type = @"video";

    NSLog(@"Type: %@", detailController.type);

    [self.navigationController pushViewController: detailController animated:YES];
}`
在序列图像板中选择
DetailViewController
,并将序列图像板id设置为“DetailController”。确保您的
ListViewController
嵌入到
UINavigationController
中,您可以通过选择
ListViewController
并转到
编辑器->嵌入->导航控制器来实现。遵循这些步骤,你的问题就会得到解决

或者,您可以将ListViewController中的segue指定给DetailViewController并使用

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    NSIndexPath *path = [self.tableView indexPathForSelectedRow]; //create tableview outlet
    [segue.destinationViewController setType:@"video"];
}


您确定detailController不是nil吗?如果在此块/函数的第2-4行之间输入NSLog detailController,它将返回“”。您是否覆盖了类型设置程序?您将
UINavigationController*navigationController
推入导航堆栈,而不是
detailController
。从方法返回后,对
detailController
的引用丢失(如果不在ARC下,甚至会泄漏)。问题是您创建了一个新的DetailViewController;(DetailViewController*detailController=[[DetailViewController alloc]init]),但您推送UINavigationController。您应该做的是从故事板中安装Tintia DetailViewController并推送其实例。顺便说一句,推动NavigationViewController通常是一个错误的做法。您确定detailController不是nil吗?如果我在该块/函数的第2-4行之间NSLog detailController,它将返回“”。您是否覆盖了类型设置程序?您正在将
UINavigationController*navigationController
推入导航堆栈,而不是
detailController
。从方法返回后,对
detailController
的引用丢失(如果不在ARC下,甚至泄漏)。问题