【发布时间】:2012-12-16 06:03:19
【问题描述】:
我有一个viewController,它有一个按钮,单击该按钮时,会动态创建对另一个viewController 类的引用,并在此过程中设置该viewController 的参数。我在 for 循环中执行此操作,如下所示:
-(void) clickOnButton:(id)sender {
for (PersonObject *checkPerson in [DataModel sharedInstance].personList) {
if (((UIControl*)sender).tag == checkPerson.personID) {
ParentViewController *parentView = [[NSClassFromString(checkPerson.childViewController) alloc] init];
parentView.personName = checkPerson.name;
NSLog(parentView.personName);
[self.navigationController pushViewController:parentView animated:YES];
}
}
}
在创建的并将用户发送到的 viewController 中,我的 viewDidLoad 方法中有以下代码:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
NSLog(@"Hello %@", personName);
UILabel *title = [[UILabel alloc] initWithFrame:CGRectMake(0, 10, 150, 35)];
[title setCenter:CGPointMake(self.view.frame.size.width/2, 27)];
[title setBackgroundColor:[UIColor clearColor]];
[title setTextAlignment:NSTextAlignmentCenter];
[title setFont:[UIFont boldSystemFontOfSize:15]];
[title setText:personName];
[self.view addSubview:title];
}
当我运行我的代码时,第一个 viewController 向我提供了 personName 参数的 NSLog 的正确输出,但是,第二个 viewController 语句中 viewDidLoad 方法中的 NSLog() 显示我的 personName 值为 nil,并且什么都没有显示为我的 viewController 标题。
参数 personName 是 NSString 类型,在父 viewController 类和子 viewController 类中都可以找到(有几个 viewController 类扩展了这个父类)。如何动态创建子 viewController 对象并让它捕获使用父 viewController 发送给它的正确参数值?
【问题讨论】:
-
声明为(非原子,保留)
-
顺便说一句(与您的问题无关),我注意到您将您的财产声明为
retain。如果您使用 ARC,则应将retain替换为strong。如果你没有使用 ARC,那么你的代码可能有泄漏,因为当你alloc/init你的ParentViewController时,你可能也应该autorelease它。
标签: ios inheritance uiviewcontroller