【问题标题】:Xcode 5 iOS 7 Simulator not loading Storyboard and making me crazy! (no Localization)Xcode 5 iOS 7 Simulator 没有加载 Storyboard 让我抓狂! (没有本地化)
【发布时间】:2013-12-07 19:21:26
【问题描述】:

在 stackOverflow 上搜索了将近一个小时后,我还是空了,所以我需要你的帮助。

我几天前在 Xcode 5 中为 iOS 7 创建了一个主从项目。

完成大型编辑后,我启动了应用程序,一切正常。然后,我通过将附件从 Checkmark 更改为 None,在情节提要中对 TableViewCell 进行了一些小改动。

当我在模拟器中再次运行应用程序时,复选标记不再存在,但单击主视图单元格不再加载详细视图。

我发现很多人在 stackOverflow 上谈论这个,但他们似乎都在尝试使用本地化。我没有接触过本地化,所以我很确定这不是我遇到的问题。

这是我尝试过但没有成功的方法:

  • 将配件设置改回复选标记(复选标记未在模拟器中重新出现)

  • 仔细检查“本地化锁定”是否设置为“无”

  • 清洁代码(不知道具体是做什么的,但我试过了……)

  • 从我的模拟器中删除并重新安装应用程序

  • 退出并重新打开 Xcode

  • 在项目导航器中删除对故事板的引用,重新构建并运行,然后重新添加故事板(应用程序在项目中没有故事板时运行与使用故事板时完全相同)

  • 重新启动我的电脑

  • 删除“Users/Library/Application Support/Iphone Simulator”中相关的 Iphone Simulator 目录,然后重新启动模拟器

这些都没有奏效!

应用的第一页出现了,但情节提要功能都不起作用(没有转场,没有复选标记)。

我一直在假设这是 Xcode 后台进程的问题,但它很可能是我的代码。

这是来自 MasterViewController.m 文件的代码(这是我在 Main.storyboard 文件之外编辑的最后一件事,我将 TableCell 附件设置为“无”):

- (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 厄运中遇到这个问题!我将永远感激...

【问题讨论】:

  • 贴出相关代码以便我们更好地了解?您可能错过了一些小事。
  • 谢谢若苏。刚刚添加了我认为最相关的代码部分。让我知道代码中是否还有其他有用的部分。
  • 你为什么使用[[UITableViewCell alloc] init]而不是-dequeueReusableCellWithIdentifier:forIndexPath:
  • 谢谢杰弗里!!这就是我的代码不起作用的原因...我采用了 dequeueReusableCellWithIdentifier:forIndexPath: 因为我知道我最多只能在该 TableView 中创建 2 个单元格。如果您没有多个 View 的单元格,任何人都可以解释为什么需要将可重复使用的单元格出列?

标签: ios xcode xcode5


【解决方案1】:

这里的问题是您使用的是[[UITableViewCell alloc] init]。这将创建一个具有所有默认属性的通用 UITableViewCell。您需要使用-dequeueReusableCellWithIdentifier:forIndexPath: 来创建具有您需要的所有自定义属性的单元格。

您希望表格视图创建新单元格的原因是表格视图知道如何根据情节提要中布局的原型单元格创建单元格。

在从情节提要加载表格视图期间隐藏的是对表格视图中定义的所有原型单元格的-registerNib:forCellReuseIdentifier: 调用。这告诉表格视图如何创建一个看起来像原型的单元格。

【讨论】:

  • 太棒了!这对我来说很有意义。 dequeueReusable... 正在经历注册我在情节提要中创建的特定单元格的过程,而不仅仅是像 alloc-init 那样创建一个新的通用单元格对象。感谢您的完整解释
猜你喜欢
  • 1970-01-01
  • 2014-04-16
  • 2018-03-22
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 2014-09-19
  • 2010-11-19
  • 1970-01-01
相关资源
最近更新 更多