【问题标题】:Xcode 4: Creating a UIView xib, not properly connectingXcode 4:创建 UIView xib,未正确连接
【发布时间】:2011-10-05 21:26:23
【问题描述】:

我正在尝试创建一个包含将嵌入 TableViewCell 中的视图的 nib。我已经创建了接口和实现文件ResultCell.hResultCell.m。它们是现货,开箱即用,无需更改代码。

然后我创建一个空的 XIB 文件,并将 UIView 拖到它上面。然后我单击文件的所有者,并将类型设置为ResultCell。我单击视图,并将其类设置为ResultCell

这是我遇到的问题:

  1. 当使用助手编辑器视图(我居住的)时,ResultCell.h 文件在我查看 ResultCell.xib 文件时不会出现。我必须通过点击自动并选择文件来强制它加载。
  2. 当我在视图中放置一个标签,然后按 Ctrl+单击并拖动到 .h 以创建一个插座时,我收到以下错误消息:“无法插入新的插座连接:找不到关于名为 ResultCell 的类的任何信息。”

我尝试创建和重新创建视图,但它不起作用,我开始失去耐心。任何帮助将非常非常感谢!

【问题讨论】:

  • 我自己也遇到了这个问题。昨晚它工作,今天没有。如果我找到任何东西,我会告诉你的。
  • 为了记录,这里的多个答案在去年帮助了我。最新版本的 Xcode 有所改进。

标签: ios xcode xcode4


【解决方案1】:

我今天在 Xcode 12.1 上遇到了这个问题。

我做了典型的删除派生数据,甚至重新启动了我的电脑,但没有运气。

最后我解决了这个问题。

  1. 在 IB 中选择视图控制器
  2. 将右侧面板中自定义类 > 类下的类名更改为随机类名
  3. 将类名改回正确的类名。

【讨论】:

    【解决方案2】:

    当我尝试使用以下方式自动生成动作函数时,我遇到了这个问题。

    但我可以用下面的方法,先手动编写动作函数,然后拖动@IBAction函数的区域

    【讨论】:

      【解决方案3】:

      我也有同样的问题。重建项目对我有帮助 Command+B.

      【讨论】:

        【解决方案4】:

        这个问题还有一个不同的原因......如果您使用 ios 以外的模板创建了新的 cocoa 类文件......我可能会发生......

        解决方案是删除它并使用正确的模板重新创建它

        【讨论】:

          【解决方案5】:

          这个问题似乎是一个 Xcode 错误,主要是在您用同名的新文件替换文件时出现。 Xcode 似乎保留了对同名旧文件的引用。

          无论如何,解决这个问题的方法似乎是:

          1. 清理项目
          2. 在项目导航器视图中单击(您的项目)。转到您正在为其构建的目标的构建阶段下的编译源。删除并重新添加给您带来麻烦的 .m 文件。
          3. 或者,在 NIB 文件的文件检查器(实用程序视图)中,在 Target Membership 下,取消选中并重新检查目标名称。
          4. 重新启动 Xcode 以获得良好的效果。
          5. 当然,单独删除和添加 .m 文件也应该可以解决问题。

          (仅第 1 步和第 2 步就为我解决了。)

          【讨论】:

            【解决方案6】:

            在 XCode 7.1 中,在我的源文件中的不同位置添加连接器是可行的。我被引用到我的一个变量的错误就好像它是一个类(没有任何意义)。当我在该变量下方而不是上方添加连接器时,错误停止发生。

            【讨论】:

              【解决方案7】:

              正如其中一些答案所暗示的那样,不属于“目标”的新类可能是其根本原因。

              当创建一个新的 cocoa 类时,默认情况下添加新类到目标的选项是默认选中的,但是由于任何原因,当你点击保存时应该不选中它,你会遇到这个问题。

              将新类添加到应用程序目标的任何这些变通方法都可以解决问题,并且是所有这些“修复”的共同点。

              我认为 XCode 可能存在一些错误,这些错误会导致默认情况下不会将新文件添加到应用程序的主要目标中。修复归结为将“损坏”类添加到主目标

              【讨论】:

                【解决方案8】:

                希望这对那里的人有所帮助。

                我只需要删除派生数据文件夹。您需要点击 Window -> Organizer -> Projects -> Delete Derived Data

                并重新启动 XCODE。

                你应该很高兴!

                【讨论】:

                  【解决方案9】:

                  使用 Swift,我遇到了类似的问题。我发现 cmets 对我来说是问题的一部分。

                  我利用默认视图控制器,在其中做了一些工作,然后通过复制整个第一个视图控制器创建了第二个视图控制器,将其剥离为仅 viewDidLoad() 并将类重命名为 TestViewController。构建工作,代码执行。一切都很好。

                  当我去拖一个 UITextField 来创建一个插座时,它不会让我。我注意到我的 cmets 仍然说“ViewController.swift”,所以我将评论文本更改为“TestViewController.swift”并重新构建。我能够连接我的插座!

                  我想知道发生的事情是否是索引器正在读取 cmets 以及类名,并且不知何故感到困惑。

                  【讨论】:

                    【解决方案10】:

                    对于此类视图的 *.m 文件,打开“显示文件检查器”并取消选中该项目的“目标成员身份”,然后执行清理(菜单产品->清理)并再次检查该项目的“目标成员身份”

                    【讨论】:

                      【解决方案11】:

                      就我而言,我有多个项目以及其他一些依赖项。我试图通过删除派生数据或重新启动 XCode 来解决它,但它无法正常工作。最后,我尝试了以下方法,它的工作原理:

                      转到 target > Build Target Architectures Only > 并将 Debug 和 Release 都设置为 NO。

                      为工作区中的所有项目设置此项并重新编译以确保没有其他错误。也许没有意义,但以某种方式做到了。在我的编译过程中,我遇到了其他问题,例如链接器错误和未找到符号。

                      【讨论】:

                        【解决方案12】:

                        上述解决方法都没有为我解决连接器问题,所以我搁置了我的宠物项目,直到遇到以下 stackoverflow 线程:

                        https://stackoverflow.com/a/15873770/2846800

                        我一直在使用以前版本的 XCode 处理一个大型项目,并关闭了索引。通过重新启用索引,我的问题现已得到解决:

                        defaults delete com.apple.dt.XCode IDEIndexDisable
                        

                        我现在可以使用 Interface Builder 的 D&D 功能了。我希望这可以帮助其他人......

                        【讨论】:

                          【解决方案13】:

                          我在一个用 Swift 编写的项目中遇到了类似的问题。

                          对我有用的是在这样的代码中设置 IBOutlet

                          @IBOutlet var foo: UIView?
                          

                          然后通过拖动到代码行旁边出现的小圆圈将其连接到 Interface Builder。

                          【讨论】:

                          • 这也是我能够让它为我工作的唯一方法。我正在关注为 Objective-C 编写的 Apple 教程(立即开始开发 iOS 应用程序),并且需要连接 New To-Do Item 文本字段。最后我创建了@IBOutlet var textField: UITextField?并与之相连,它起作用了。使用 XCode 6.4
                          【解决方案14】:

                          我遇到了这个问题,并找到了上面未列出的解决方案。

                          在我的例子中,我可以看到类 .h 文件中有问题,因为我的自定义视图控制器无法识别类:UIViewController(它是黑色而不是紫色)。所有其他自定义视图控制器都有:紫色的 UIViewController。

                          在我的情况下,也可能是你的情况下,我需要将类添加到目标/构建阶段/编译源下拉列表中。 .m 需要添加。所有其他 .m 都在那里,但不是这个。

                          添加后,:UIViewController 显示为紫色,一切正常。

                          【讨论】:

                            【解决方案15】:

                            对我来说,清理或删除 DerivedData 是否解决了问题。

                            我多次尝试删除并重新创建我的 UIViewController 类,但一次又一次地遇到问题。

                            然后我重新创建了 UIViewController 类并给它起了一个不同的名字。这解决了我的问题。

                            【讨论】:

                              【解决方案16】:

                              我只是在这里尝试了所有方法,但没有任何效果(使用 Xcode 5 的开发者预览版)。

                              唯一对我有用的是将这个不完整的行放在我的接口文件中:

                              @property (nonatomic, weak)
                              

                              无论出于何种原因,之后通过从 .xib 拖放添加出口和操作都可以正常工作。

                              【讨论】:

                                【解决方案17】:

                                只需在@implementation 和@synthesize 之间划一条线。这里的大多数答案都有共同点。它对我有用

                                @implementation 
                                
                                @synthesize
                                

                                【讨论】:

                                  【解决方案18】:

                                  这可能是一个老话题,但以防万一以后有人遇到同样的问题,请尝试删除相关的 .xib、.h 和 .m 文件并创建新的。对我来说,我的 .h 文件中的 UIViewController 不是紫色的,甚至退格和键入也没有用。

                                  【讨论】:

                                    【解决方案19】:

                                    在我的情况下,它有助于对相应的头文件进行“假更改”(只是一个空格)。

                                    【讨论】:

                                    • 我想这可能也为我做了。就我而言,我手动添加了一个插座。然后我可以将面条连接到它,并通过 ctrl 拖动创建新的出口。
                                    【解决方案20】:

                                    相似的症状,但不同的原因。

                                    显然,当焦点位于助手视图上时,我按了退格键,因为标准文件模板注释行之一从 // 到 / 导致文件无法编译。

                                    修复注释允许 SDK 解析文件,将其识别为 UIViewController,并添加到插座中。

                                    所以——如果您有这个问题,请进行构建或分析以查看您的视图控制器 .h 文件中是否存在需要修复的错误。然后尝试其他解决方案。

                                    【讨论】:

                                      【解决方案21】:

                                      重命名类文件可能会取消它们与 XIB 的链接。这个答案帮助我发现了这一点:

                                      Ctrl-Drag from button to method not working. Xcode/Interface Builder

                                      检查您的自定义类是否在 Identity Inspector 中正确设置。

                                      【讨论】:

                                        【解决方案22】:

                                        也许对我有用的是这个..(Xcode v4.5)

                                        这不起作用

                                        我试图控制拖动到我的 .h 的界面定义中

                                        @interface SearchViewController : UIViewController
                                        

                                        @end

                                        这行得通(可能这就是它应该如何工作,我以前不知道) 请参阅左括号和右括号。在右括号后控制拖放。

                                        @interface SearchViewController : UIViewController
                                        {
                                        }
                                        
                                        @end
                                        

                                        【讨论】:

                                          【解决方案23】:

                                          如果您从其他项目复制文件,请确保选中“添加到目标”框

                                          【讨论】:

                                            【解决方案24】:

                                            在 XCode 中转到管理器,单击项目,单击删除派生数据...而不是清理项目

                                            【讨论】:

                                              【解决方案25】:

                                              我今天遇到了同样的问题。重新启动 XCode 并没有解决我的问题。通过使用 project"Derived Data""Delete" 选项,我能够让事情恢复正常,该项目位于组织者。组织者说,“衍生数据包括索引、构建输出和日志”。我猜是 indexbuild output 导致了这个问题。

                                              【讨论】:

                                                【解决方案26】:

                                                我遇到了同样的问题。我试过了:

                                                • 重启 Xcode
                                                • 删除派生数据
                                                • 还有更多

                                                这些都不起作用。对我有用的只是:

                                                • 从项目中删除“可疑”类文件(只是删除引用,对吧?)
                                                • 将它们重新添加到项目中

                                                完成了!

                                                【讨论】:

                                                • 这对我有用,谢谢!这是我尝试的第一件事,除了重新启动 XCode,因为它看起来工作量和风险最少,而且效果很好。
                                                • 在重新启动 xcode 并删除派生数据后为我工作没有
                                                • 这个也对我有用。这可能与重构类名有关(这是我之前所做的)。
                                                【解决方案27】:

                                                我注意到 .m 文件被移动到 en.lproj 文件夹中。

                                                只需从 Xcode 中删除(仅供参考).m 文件并将 .m 移出 en.lproj。再次添加它。它将解决问题。

                                                别担心,您将恢复所有连接。

                                                【讨论】:

                                                • 我的 .m 是自动生成的,我还没有更改它。我做到了,一切都很好。没有其他任何工作。
                                                【解决方案28】:

                                                如果重新启动 Xcode 对您不起作用,我发现将新的 .m 文件切换回目标成员身份有效。

                                                【讨论】:

                                                  【解决方案29】:

                                                  这对我有帮助:

                                                  1. 从项目文件面板(左侧)中选择损坏的 xib 文件。
                                                  2. 单击编辑器视图中的文件所有者图标。
                                                  3. 从属性面板(右侧)中选择第三个选项卡(顶部)
                                                  4. 指定“自定义类”

                                                  如果您没有看到“面板”,请查看窗口的右上角并启用正确的“查看”按钮。如果您没有看到“查看”按钮,请点击右上角的胶囊按钮。

                                                  【讨论】:

                                                  • 我最近更改(重构)了类名。此答案中提到的自定义类仍设置为旧名称。将其更改为新名称并已修复。
                                                  【解决方案30】:

                                                  我今天也进入了类似的状态。这很奇怪:我可以将任何 XIB(新的或现有的)附加到项目中任何已经存在的 ViewController 类,但我无法创建新的 ViewController 并将其正确附加到任何 XIB。 “助手”功能不起作用,IB-to-headerfile-connection 功能也不起作用。

                                                  关闭项目并重新打开并没有解决它。
                                                  退出 XCode 并重新启动并没有解决它。
                                                  创建一个新项目并测试功能运行良好,这让我相信某处的某个缓存中存在损坏的东西。

                                                  我的解决方案

                                                  • 关闭您的项目。
                                                  • 转到 ~/Library/Developer/XCode/DerivedData 文件夹并删除那里引用您正在处理的项目的所有子文件夹。
                                                  • 在 XCode 中打开您的项目。现在应该可以解决问题了。

                                                  顺便说一句,仅仅运行一次完全清洁似乎并不能解决问题。我不得不丢弃派生数据。我确定我之所以进入这个职位是因为我正在玩 git 游戏,但我不知道如何摆脱,因为即使切换回早期的 git 修订版也无济于事。 (这也是一个很大的线索,它是项目本身未跟踪的东西。)

                                                  【讨论】:

                                                  • 我刚刚在我的 Mac 上登录 SO,只是为了给这个答案投票!完全为我工作。这让我发疯了,因为我刚刚学习使用 XCode,而且没有像这些荒谬的问题已经够难了。 :) 谢谢!!!
                                                  • 它甚至可以在不重新启动 xcode 的情况下工作;只是删除派生数据并重建(在 iOS 项目上)
                                                  • 这在重新启动 xcode 时不起作用。我不知道 David Pisoni 的方法是如何发生的,效果很好。
                                                  • 太棒了。你怎么知道的?为我工作。
                                                  • 哈哈,很高兴知道 IOS 和 xcode 可能与使用 eclipse 和 Android 一样多错误:p
                                                  猜你喜欢
                                                  • 2011-07-17
                                                  • 1970-01-01
                                                  • 2016-08-05
                                                  • 1970-01-01
                                                  • 1970-01-01
                                                  • 2012-09-30
                                                  • 2018-07-27
                                                  • 2019-01-20
                                                  • 2013-03-12
                                                  相关资源
                                                  最近更新 更多