我有一个应用程序,我在其中根据用户在应用程序中的位置加载变量视图控制器。这是我的代码。
-(IBAction)buttonPressed:(id)sender;{
if (mission <1) {
gameViewController *detailViewController = [[gameViewController alloc] initWithNibName:@"gameViewController" bundle:nil];
[self.navigationController pushViewController:detailViewController animated:YES];
detailViewController.which2 = which;
}
else if (mission > 0) {
NSString *viewController = @"gameViewController";
NSString *missionViewController = [viewController stringByAppendingString:missionNo];
Class controllerClass = NSClassFromString (missionViewController);
id detailViewController = [[controllerClass alloc] initWithNibName:@"gameViewController" bundle:nil];
NSLog(@"missionViewController;%@",missionViewController);
[self.navigationController pushViewController:detailViewController animated:YES];
detailViewController .which2 = which;
}
}
除了我想将第一个视图控制器中的字符串传递给第二个视图控制器之外,一切都工作得很好。
正如你所看到的,我已经在detailViewController.which2 = which;
之上放入了代码我已经在我的第一个视图控制器和所有后续视图控制器中的NSString * which2中创建了属性并合成了NSString *。在第一个任务是&lt; 1的情况下,一切正常,NSLog显示传递的字符串。然而,使用第二个detailViewController(它是变量视图控制器),我得到错误属性'which2'在类型为“_strong id”的对象上找不到有没有人对如何解决这个问题有任何建议?
其他viewControllers是gameViewController1,gameViewController2等。每个都是相当漫长而复杂的。但是它们都加载到相同的xib文件gameViewController中。一旦用户完成游戏视图,就会有一个更新为更高的UI标签,这样他们就可以进入系列中的下一个或返回主菜单。如果它们返回主菜单,则会将数字添加到“gameViewController”中,以便加载正确的数字。因此,我无法指定要加载哪个视图控制器,因为它取决于用户的位置。因此,添加了#of mission的missionViewController加载了正确的视图控制器。每个后续视图控制器都有一个创建和合成的视图。如果我们假装所有后续视图控制器只有一个UILabel将显示字符串“which2 in it。该怎么办呢?我要做的就是将字符串”“传递给下一个viewController(无论哪一个)为”which2 ”
答案 0 :(得分:0)
<强>更新强> 使用Protools更新值。
@protocol MissionProtocol
@required
-(void) updateValue:(NSSTring*) value;
@end
在ViewControllers中实现协议。即。
@interface MissionViewController:UIViewController<MissionProtocol>
....
@end
在您的实现文件中,实现方法updateValue。
-(void) updateValue:(NSString*) value
{
self.which2=value;
}
然后将原始代码更改为:
NSString *viewController = @"gameViewController";
NSString *missionViewController = [viewController stringByAppendingString:missionNo];
Class controllerClass = NSClassFromString (missionViewController);
id<MissionProtocol> detailViewController = [[controllerClass alloc] initWithNibName:@"gameViewController" bundle:nil];
[detailViewController updateValue:which];
答案 1 :(得分:0)
写这个:`detailViewController .which2 = which;
在您推送导航控制器之前。
答案 2 :(得分:0)
只要项目中存在选择器,动态绑定允许您将消息发送到id
,但不允许使用点语法。
更改
detailViewController.which2 = which;
到
[detailViewController setWhich2:which];
应该禁止警告。