在搜索stackOverflow近一个小时之后,我已经空了,所以我需要你的帮助。
我有一个我在几天前在Xcode 5中为iOS 7创建的主 - 详细项目。
完成大量编辑后,我启动了应用程序,一切正常。然后我通过将配件从Checkmark更改为None来将故事板中的一个小更改改为TableViewCell。
当我在模拟器中再次运行应用程序时,复选标记不再存在,但单击主视图单元格不再加载详细信息视图。
我发现很多人在stackOverflow上谈论这个问题,但他们似乎都在尝试使用本地化。我没有触及本地化,所以我很确定这不是我遇到的问题。
这是我尝试过没有成功的事情:
将附件设置更改回复选标记(复选标记未在模拟器中重新出现)
仔细检查“本地化锁定”设置为“无”
清洁代码(不知道究竟是什么,但我试过了......)
从我的模拟器中删除并重新安装应用程序
退出并重新打开Xcode
删除项目导航器中故事板的引用,重建并运行,然后重新添加故事板(应用程序在项目中没有故事板的情况下与故事板完全相同)
重新启动计算机
删除“用户/资料库/应用程序支持/ Iphone模拟器”中的相关Iphone Simulator目录,然后重新启动模拟器
这些都没有奏效!
该应用程序的第一页显示,但没有任何故事板功能正常工作(没有segues,没有复选标记)。
我一直在假设它是Xcode后台进程的一个问题,但它很可能是我的代码。
这是来自MasterViewController.m文件的代码(除了我将TableCell附件设置为'None'的Main.storyboard文件之外,这是我编辑的最后一件事):
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [[UITableViewCell alloc] init];
cell.textLabel.text = _cellStringsArray[indexPath.row];
// if (!([cell.textLabel.text isEqual: @"To Station"]||[cell.textLabel.text isEqual: @"From Station"])) {
// cell.accessoryType = UITableViewCellAccessoryCheckmark;
// }
return cell;
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
NSLog(@"preparing for segue to station selector");
if ([[segue identifier] isEqualToString:@"search"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
THStationSearchViewController *searchview = [segue destinationViewController];
searchview.stationSelection = indexPath.row;
searchview.delegate = self;
}
}
我是Xcode开发的新手,也是一般的编程菜鸟。我只是个白痴吗?有什么明显的东西我不见了吗?
请保存我和未来的人从Xcode厄运中遇到这个问题!我将永远感激......
答案 0 :(得分:3)
这里的问题是你正在使用[[UITableViewCell alloc] init]
。这将创建一个包含所有默认属性的通用UITableViewCell。您需要使用-dequeueReusableCellWithIdentifier:forIndexPath:
创建包含所需自定义属性的单元格。
您希望表视图创建新单元格的原因是表视图知道如何根据故事板中布局的原型单元格创建单元格。
在从故事板加载表视图期间隐藏的是对表视图中定义的所有原型单元调用-registerNib:forCellReuseIdentifier:
。这告诉表视图如何创建一个看起来像原型的单元格。