【问题标题】:Storyboard warning: prototype table cells must have reuse identifiers情节提要警告:原型表单元格必须具有重用标识符
【发布时间】:2023-03-02 22:46:01
【问题描述】:

我从情节提要收到此警告 - 原型表单元格必须具有重用标识符。

我在属性检查器中重命名了标识符,但它似乎没有删除警告。

有什么建议吗?

【问题讨论】:

  • 您要么填写了错误的字段,要么您拥有多个表格视图。可以发一张属性检查器的截图吗?
  • 现在好了,伙计。我找到了解决方案。 Identifier 的值应与重用标识符相同。 :)
  • 你为每个单元格设置了一个标识符吗?
  • 嗨本田!你能告诉我你做了什么,因为我遇到了同样的错误。
  • 我注意到有时(当前使用最新的 Xcode 5 Beta 5 (5B103i))会在情节提要中突出显示错误/警告的错误位置。因此,如果您单击警告,它有时会显示错误的位置,其中可能已经修复了类似的警告。我确实建议手动检查您在情节提要中拥有的任何表格视图,并检查是否有任何其他单元格缺少标识符。上面用这个警告解决了我的问题。感谢@K.Honda 提出这个问题,因为这个主题帮助我理解了如何解决这个问题。

标签: iphone ios xcode storyboard


【解决方案1】:

要关闭警告,您必须为单元标识符命名:

【讨论】:

  • 碰巧我。关闭 xcode - 打开它,然后更改标识符
  • 当警告仍然存在意味着您的 StoryBoard 中的某处仍有一个没有标识符的单元格
  • 如果你有超过 1 个原型单元格,你必须给它们都一个标识符,否则只需在原型单元格中将数字设置为 1
  • 我不得不删除 Derived Data 文件夹(Xcode 相当于 Windows 重新启动)并重建以摆脱这个虚假警告。
  • 这对我有用:关闭 Xcode,在 Finder 中打开 /Users/username/Library/Developer/Xcode/DerivedData,然后删除其所有内容(不是 DerivedData 文件夹本身)。
【解决方案2】:

我注意到当您有多个原型单元格(在 tableview 属性中)并且没有为它们中的所有提供重用标识符时会发生此错误。

【讨论】:

  • 我也见过这个,有没有办法一次命名所有单元格,或者有没有其他方法可以删除这些警告?
  • 每个 Prototye 单元都需要自己的唯一名称。所以没有办法自动完成
【解决方案3】:

标识符是您在 .m 文件中引用的名称。未填充时无法引用单元格。

【讨论】:

    【解决方案4】:

    因为故事板实际上是 XML 文件,所以另一个技巧是使用任何文本编辑器(不是 Xcode!)打开故事板并尝试找到所有 tableViewCell 节点。例如按 CMD+F,输入 <tableViewCell contentMode="scaleToFill" 并按 Enter。您可能会发现,与这一行相同的行:

    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" accessoryType="disclosureIndicator" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" reuseIdentifier="GenericCellID" id="kBr-Qn-Tki">
    

    请注意reuseIdentifier="GenericCellID"键值。 触发警告的行(没有重用标识符)将没有这样的键值。在文本编辑器中查看上面的节点,您将看到 tableViewController 节点的类名,您需要在 Xcode 的故事板编辑器中检查并根据 aleroot 的回答进行修复。

    【讨论】:

    • 您实际上可以使用 Xcode 将您的故事板作为代码打开,方法是按住 CTRL 并单击您的故事板文件 > Open As > Source Code
    【解决方案5】:

    这用于通过编程设置重用标识符

    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath (NSIndexPath*)indexPath 
    {
        static NSString *cellIdentifier = @"wot";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
    
        if (!cell)
            cell = [[UITableViewCell alloc] initWithStyle: someStyle reuseIdentifier: cellIdentifier];
    
        return cell;
    }
    

    【讨论】:

      【解决方案6】:

      由于双击此警告可能会导致一些疯狂的追逐(特定的 UITableViewCell 没有被选中),只是想补充一点,虽然其中一些警告会自动解决,有些会不是

      如果您确信已在 Storyboard 中标记了所有单元格,请重新构建项目 - 您的警告可能会消失(就像我的一样)。

      【讨论】:

        【解决方案7】:

        如果您以编程方式使用 .xib 定义单元格,另一种方法是在 Attributes Inspector 中将 Table View 的“Prototype Cells”属性设置为零。

        【讨论】:

          【解决方案8】:

          我收到了 Xcode 7 的警告。我正在使用 Swift。 我没有为初始视图控制器添加导航控制器。当我这样做时..我从 StoryBoard 收到了这个警告。 我所做的是:

          1. 有两个segue
            1. 从导航控制器到根视图控制器和
            2. 从根视图控制器到您的初始视图控制器。
          2. 选择将根视图控制器连接到 初始视图控制器。
          3. 为标识符命名
          4. 选择控制器的“Prototype”写部分-->那里 您将看到标识符作为一个选项。
          5. 粘贴与之前输入的标识符相同的名称。

          警告会响起.. 如果不清理 sdk :)

          【讨论】:

            【解决方案9】:

            确保您在对象上设置重用标识符,而不是恢复 ID。两者都可以通过故事板获得,并且很容易混淆。

            在故事板 XML 文件中,您需要设置 reuseIdentifier,而不是 restorationIdentifier

            【讨论】:

              【解决方案10】:

              万岁:重新启动 XCode 对我有用(但可能只是需要手动重建)。

              【讨论】:

                【解决方案11】:

                如果设置了reuseIdentifier 后Xcode 警告仍未消失,请尝试菜单“Product -> Clean”。这对我有帮助,之后,警告不再出现。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-06-24
                  • 2015-05-30
                  • 2016-10-08
                  • 1970-01-01
                  • 2016-12-03
                  相关资源
                  最近更新 更多