Xcode 4:创建UIView xib,无法正确连接


84

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

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

这是我遇到的问题:

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

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


我自己碰到了这个。昨晚它奏效了,今天什么也没有。如果有任何发现,我会通知您。
塔维森,2011年

根据记录,在过去的一年中,这里的多个答案对我有所帮助。Xcode的最新版本已改进。
蒂姆·沙利文

Answers:


82

这可能不适用于您的特定问题,但是在使用新创建的笔尖时偶尔会出现该错误。删除并重新创建与以前相同名称的笔尖和View Controller并不能解决问题,但是重新启动Xcode可以解决此问题。


+1也为我工作。只需重新启动XCode,现在我就可以按CTRL + Drag来在.h文件中创建新的@propertys。
Mike Gledhill

1
David Pisoni的答案对我有用。只是重新启动Xcode并没有减少芥末味。
安迪

我现在还没有在许多Xcode版本中出现此问题,因此,可能还有另一个原因比现在我去年编写此答案时遇到的原因更为普遍。
放牧

@Defragged您还可以包括在引用前按Command K清除高速缓存的步骤,甚至更好的方法是退出Xcode然后清除高速缓存(~/Library/Developer/Xcode/DerivedData
2013年

我正在使用Xamarin Studio。我不得不退出xcode和xamarin Studio,然后重新打开Xamamrin Studio,并从此处打开一个在xcode中启动的xib文件。助手编辑器然后正确打开。
Dave Haigh 2013年

113

就在今天,我进入了类似的状态。这很奇怪:我可以将任何XIB(新的或现有的)附加到项目中任何已经存在的ViewController类,但是我无法创建新的ViewController并将其正确附加到任何XIB。“辅助”功能无效,IB到头文件连接功能也无效。

关闭项目并重新打开并不能解决问题。
退出XCode并重新启动并不能解决问题。
创建一个新项目并测试功能正常,这使我相信某个地方的某些缓存中有损坏。

我的解决方案

  • 关闭您的项目。
  • 转到〜/ Library / Developer / XCode / DerivedData文件夹,然后删除引用您正在处理的项目的所有子文件夹。
  • 在XCode中打开您的项目。现在应该解决此问题。

顺便说一句,仅仅运行一次完整的清理似乎并没有清除一切。我不得不丢弃衍生数据。我确定我是因为玩过git游戏而进入这个职位的,但我不知道如何退出,因为即使切换回早期的git版本也无济于事。(这也是该项目本身无法跟踪的一个大线索。)


6
我刚刚在Mac上登录了SO,因此我可以投票赞成这个答案!完全为我工作。这让我发疯了,因为我只是在学习使用XCode,而且已经没有像这样的可笑问题了,已经够难了。:) 谢谢!!!
戴夫

2
它甚至可以在不重启xcode的情况下运行;只是删除派生数据并重建(在iOS项目上)
nob

重新启动xcode时不起作用。我不知道大卫·皮索尼(David Pisoni)的方法是如何发生的。
mmopy 2012年

太棒了 你怎么知道的?为我工作。
hol 2012年

1
很高兴知道,与使用eclipse和Android相比,IOS和xcode可能同样具有bug:p
James andresakis 2012年

14

我只是遇到了这个问题,重新启动Xcode并没有解决它。我从项目中删除了类文件,然后将它们重新添加进来,它开始工作。


13

我有同样的问题。我试过了:

  • 重新启动Xcode
  • 删除衍生数据
  • 还有很多

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

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

并做了!


2
这对我有用,谢谢!这是我尝试的第一件事,而不是重新启动XCode,因为这似乎最少的工作和风险,而且效果很好。
adriandz 2012年

1
重新启动Xcode和删除数据导出后为我工作didnt
ELAD小号

1
这个也对我有用。这可能与重构类名有关(这就是我之前所做的)。
ecotax 2013年


3

这帮助了我:

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

如果看不到“面板”,请查看窗口的右上角,并启用适当的“查看”按钮。如果您没有看到“查看”按钮,请单击最右上角的胶囊按钮。


我最近更改(重构)了类名。此答案中提到的自定义类仍设置为旧名称。将其更改为新名称并已修复。
PaulMrG 2013年

2

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

只需从Xcode中删除(仅参考).m文件,然后将.m从en.lproj中移出即可。再次添加。它将解决此问题。

不用担心,您将获得所有连接。


我的.m是自动生成的,尚未更改。我做到了,一切都很好。没有其他工作。
2013年

2

我今天遇到了同样的问题。重新启动XCode并不能解决我的问题。通过使用可在Organizer下找到的项目“ Derived Data”“ Delete”选项,我能够使事情恢复正常。组织者说:“派生数据包括索引,构建输出和日志”。我想索引或生成输出都是导致此问题的原因。


2

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


2

就我而言,它有助于对相应的头文件进行“伪更改”(仅一个空格)。


我认为这可能也为我做到了。就我而言,我手动添加了电源插座。这样,我就可以将面条连接到它上,并通过ctrl拖动来创建新的出口。
丹尼尔·伍德

1
  1. ResultCell应该是的子类 UITableViewCell
  2. 您不应将aUIView拖到空画布上,而应将a拖到UITableViewCell
  3. 您应该选择的细胞并改变是你的子类
  4. 所有者通常是带有电池出口的控制器

每当您要加载新单元格时,请致电:

 [[NSBundle mainBundle] loadNibNamed:nibName 
                               owner:controllerWithOutletToCell 
                             options:nil]

加载后,使用单元格,并将ivar / outlet设置为nil,为下一次加载做好准备

还有其他方法,但这很常见


如果这样做,我将遇到完全相同的问题。当我查看笔尖时,助手编辑器不显示.h,并且ctrl + drag不创建出口代码,它显示错误。
蒂姆·沙利文

2
您是否正在使用4.0.2 Xcode?您可以手动设置助手编辑器(如果出现问题)。我认为您已经重新启动了应用程序以重新测试此问题(Xcode 4通常会从中受益)。听起来好像在项目中找不到类文件,或者名称错误-大写很重要。该项目目前正在建设中吗?这是一个非常高级的功能,取决于新的编译器技术。
bshirley 2011年

噢,我 是的,重新启动Xcode,它立即开始工作。'对不起,我现在要摔在我的剑上。
蒂姆·沙利文

1

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

这没用

我试图控制拖动到.h的接口定义中

@interface SearchViewController : UIViewController

@end

行得通(也许是应该的,我之前不知道)。请参见方括号。控制在括号后的拖放操作。

@interface SearchViewController : UIViewController
{
}

@end

1

我用Swift编写的项目也遇到类似的问题。

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

@IBOutlet var foo: UIView?

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


这是我也能够使它为我工作的唯一方法。我正在关注为Objective-C(今天开始开发iOS应用程序)编写的Apple教程,并且需要连接“新待办事项”文本字段。最后,我创建了@IBOutlet var textField:UITextField?并与之连接,并且有效。使用XCode 6.4
andrewz

1

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

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

我以前在XCode的早期版本中从事大型项目的工作,并且关闭了索引编制功能。通过重新启用索引,我的问题现在已修复:

defaults delete com.apple.dt.XCode IDEIndexDisable

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


1

这个问题似乎是Xcode错误,当您用相同名称的新文件替换文件时,该错误会逐渐蔓延。Xcode似乎保留了同名旧文件的引用。

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

  1. 清理项目
  2. 在“项目浏览器”视图中单击(您的项目)。转到要为其构建目标的“构建阶段”下的“编译源”。删除并重新添加.m文件,这会给您带来麻烦。
  3. 或者,在NIB文件的文件检查器(“实用工具”视图)中,在“目标成员身份”下,取消选中并再次检查目标名称。
  4. 重新启动Xcode以取得良好效果。
  5. 当然,仅删除和重新添加.m文件也应该对其进行修复。

(仅第1步和第2步为我解决了该问题。)


0

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



0

症状相似,但原因不同。

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

修复注释后,SDK可以解析文件,将其识别为UIViewController并添加在输出中。

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


0

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


0

只需在@implementation和@synthesize之间放置一行。这里的大多数答案都有相同之处。对我有用

@implementation 

@synthesize

0

我只是在这里尝试了一切,但没有任何效果(使用Xcode 5的开发人员预览版)。

对我而言唯一有效的方法是在界面文件中放入以下不完整的行:

@property (nonatomic, weak)

无论出于什么原因,通过.xib拖放来添加出口和动作都可以。


0

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

我试图多次删除并重新创建UIViewController类,却一次又一次遇到问题。

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


0

我遇到了这个问题,发现上面没有列出的解决方案。

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

就我而言,可能还有您的情况,我需要将该类添加到目标/构建阶段/编译源下拉列表中。需要添加.m。所有其他.m都在那里,但没有这个。

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


0

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

转到目标>仅构建目标体系结构>并将调试和发布均设置为否。

为工作空间中的所有项目设置此选项,然后重新编译以确保没有其他错误。也许没有道理,但是以某种方式做到了。在编译期间,我还有其他问题,例如链接器错误和未找到符号。


0

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

在此处输入图片说明


0

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

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

当我将UITextField拖入以创建插座时,它不会让我使用。我注意到我的注释仍然显示“ ViewController.swift”,因此我将注释文本更改为“ TestViewController.swift”并重新构建。我可以连接我的插座了!

我不知道发生了什么事,就是索引器正在读取注释以及类名,并且以某种方式感到困惑。


0

希望这可以帮助某人。

我只需要删除派生数据文件夹。您需要单击窗口->管理器->项目->删除派生数据

并重新启动XCODE。

你应该很好走!


0

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

创建新的可可类时,默认情况下默认情况下会选中将新类添加到目标的选项,但是由于任何原因,在单击保存时都不会选中此选项,因此会出现此问题。

新班目标

这些将新类添加到apps目标的变通办法中的任何一种都可以解决该问题,并且所有这些“修复”都具有共同点。

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


0

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


0

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

解决方案是删除它并使用正确的模板重新创建 在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.