我的ViewController1上有一个UITableView。选择后,它会加载ViewController2,带有一个变量(我声明为“passData”),同时带有所选行的相应行的名称。在测试代码的可用性时,我将“passedData”分配给ViewController2上的标签:
label.text = "passedData";
很好用。 ViewController1中我的tableview中的列表具有从具有临时命名约定的数组加载的行: 摘要,报告,细节等。
所以这个想法是当选择“Summary”时,它会加载ViewController2然后加载与SummaryViewController相关的另一个子视图。在尝试让ViewController2识别要加载哪个视图控制器时,我在-(void) viewDidLoad:
NSString *viewtoload = passedData;
if (viewtoload == "Summary") {
//Load summaryViewController
}
elseif (viewtoload == "Report") {
//Load reportViewController
}
elseif (viewtoload == "Detail") {
//Load detailViewController
}
我收到了这个错误:
1. Implicit conversion of a non-objective-C pointer type 'char *' to 'NSString *' is disallowed with ARC.
2. Result of comparison against a string literal is unspecified (use strncmp instead)
3. Comparison of distinct pointer types ('NSString *' and 'char *')
我的问题是:
1)这是一种正确的方法还是有更好的方法?
2)我如何解决上面的错误?
3)加载另一个子视图的语法是什么?
我提前感谢你们。
答案 0 :(得分:1)
如果要根据所点击的单元格加载不同的视图控制器,则应在
中执行此操作//handle selections of cell in specified row and section of table view
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//switch row
switch(indexPath.row)
{
case:0
{
//Detail row
Detail01 *viewController = [[Detail01 alloc] init];
viewController.somePassedInData = theDataToPass;
[self presentViewController:viewController animated:YES completion:nil];
break;
}
case:1
{
//Report row
Report01 *viewController = [[Report01 alloc] init];
viewController.somePassedInData = theDataToPass;
[self presentViewController:viewController animated:YES completion:nil];
break;
}
case:2
{
//Summary row
//Alloc and init VC here
Summary01 *viewController = [[Summary01 alloc] init];
viewController.somePassedInData = theDataToPass;
[self presentViewController:viewController animated:YES completion:nil];
break;
}
default:
{
break;
}
}
//deselect table cell
[_tableView deselectRowAtIndexPath:indexPath animated:YES];
}
然后,您可以在推入导航控制器
之前在VC中设置任何属性答案 1 :(得分:0)
使用正确的objective-c字符串文字@""
而不是""