我在项目中添加了一个新的nib文件,并尝试加载它.
但是,当我点击应该带我到我创建的视图的工具栏图标时,我得到一条NSInternalInconsistencyException
消息:
由于未捕获的异常'NSInternalInconsistencyException'终止应用程序,原因:' - [UIViewController _loadViewFromNibNamed:bundle:]加载了"..."笔尖,但未设置视图插座.
所以我打开了我的nib文件,我看到没有设置引用插件的视图.但是,我尝试单击并将"新引用插座"的圆圈拖动到文件所有者,但它不会让我...我需要做什么才能显示我的视图?
问题很简单:如何UITableViewCell
从Xib文件加载自定义?这样做允许您使用Interface Builder来设计单元格.由于内存管理问题,答案显然并不简单.这个主题提到了这个问题并建议了一个解决方案,但是在NDA发布之前并且没有代码.这是一个很长的线程,在没有提供明确答案的情况下讨论了这个问题.
这是我用过的一些代码:
static NSString *CellIdentifier = @"MyCellIdentifier";
MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
cell = (MyCell *)[nib objectAtIndex:0];
}
Run Code Online (Sandbox Code Playgroud)
要使用此代码,请创建MyCell.m/.h,它是所需组件的新子类UITableViewCell
并添加IBOutlets
.然后创建一个新的"空XIB"文件.在IB中打开Xib文件,添加一个UITableViewCell
对象,将其标识符设置为"MyCellIdentifier",并将其类设置为MyCell并添加组件.最后,连接IBOutlets
到组件.请注意,我们没有在IB中设置文件所有者.
如果未通过其他工厂类加载Xib,则其他方法主张设置文件所有者并警告内存泄漏.我在Instruments/Leaks下测试了上面的内容,没有发现内存泄漏.
那么从Xibs加载单元格的规范方法是什么?我们设置文件的所有者吗?我们需要工厂吗?如果是这样,工厂的代码是什么样的?如果有多种解决方案,让我们澄清每种解决方案的优缺点......
Jonathan在这里建议:Xcode包含已被删除的.xib文件!清理所有目标并清空缓存将解决Xcode包括已删除的.xib文件的问题,但我找不到在Xcode 4中清空缓存的方法.
如何在Xcode 4中做到这一点?
我的问题是我正在寻找使用storyboard和xib的方法.但我找不到以编程方式加载和显示故事板的正确方法.Project开始使用xib进行开发,现在很难将所有xib文件嵌套在storyboard中.所以我在代码中寻找一种方法,比如alloc, init, push
用于viewControllers.在我的情况下,我在故事板中只有一个控制器:UITableViewController
它有静态单元格,其中包含我想要显示的一些内容.如果有人知道在没有大量重构的情况下使用xib和storyboard工作的正确方法,我将非常感谢您的帮助.
有人可以用简单的词语解释.xib和.storyboard之间的区别吗?
无法插入新的插座连接:无法找到该类的任何信息,也没有显示任何名为"ViewController"的类
我已经完成的解决方案: - 重新启动的XCode - 重新启动的系统 - 从/ Library/developer/xcode中删除了Deriveddata内容
但没有什么对我有用
以下是错误的屏幕截图
这是我的Objective-C代码,我用它来为我的自定义加载一个笔尖UIView
:
-(id)init{
NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"myXib" owner:self options:nil];
return [subviewArray objectAtIndex:0];
}
Run Code Online (Sandbox Code Playgroud)
Swift中的等效代码是什么?
当多人合作时,故事板从git工作流角度来看是一种巨大的痛苦.例如,.storyboard文件中的XML具有其起始<document>
标记toolsVersion
和systemVersion
属性,这些属性由最新文件操作符恰好运行的任何配置更改.大家同步的Xcode版本恰恰似乎帮助toolsVersion
,但systemVersion
变化不管是什么,这取决于具体的Mac和/或开发运行OS X的版本上.
这是愚蠢的,但大多是无害的.然而,令我们担心的是,在其他时候,只需在故事板之后打开它们,就会自动对故事板进行一些其他更改git pull
.也就是说,Alice对故事板进行了更改,提交并将它们推送到存储库.然后鲍勃拉出爱丽丝的变化并打开故事板进行进一步的更改.他打开故事板的那一刻,文件图标立即变为修改,但是,未保存的状态,以及git status
已发生的任何数量的变化怪异表演.所有这一切,没有鲍勃改变任何东西或自己保存文件.
我们看到的最常见的自动更改是<classes>
故事板文件末尾附近整个标记层次的消失或重新出现.我们还没弄清楚造成这种情况的原因.我们可能在各种.lproj目录中有几个本地化版本的故事板,当在Interface Builder中打开它们时,类层次结构可能会自动从某些层次结构中删除并添加到其他版本中,或者单独留在某些层次结构中.这会导致很多噪音git diff
,但实际上并没有破坏任何功能.我们经常会有选择地将我们所做的实际更改添加到git的索引中,提交那些,然后只丢弃自发的,荒谬的<classes>
变化.这是为了保持提交小而好,因为它们应该是.然而,最终,由于Xcode不断重新进行更改,它变得太麻烦了,有人只是愤怒地提交它们以及其他一些东西......这很好,直到其他人的Xcode决定要将它们更改为否明显的原因.(我们的提交历史对此很多咒骂.)
是否有其他人看到这种行为?这是我们的一个或多个开发者Mac上的Xcode错误还是配置问题?我们在与XIB文件协作时已经看到了一些类似的行为,但故事板似乎更容易受此影响.
我想在故事板中使用多个viewcontrollers中的视图.因此,我考虑在外部xib中设计视图,以便在每个viewcontroller中反映更改.但是如何从故事板中的外部xib加载视图呢?它甚至可能吗?如果不是这样的话,还有哪些其他选择可以适应这种情况呢?
我到处都在搜索,到目前为止没有什么对我有用.
基本上我想要一个名为rootView.xib的.xib文件,在其中我希望有一个UIView(让我们称之为containerView)只占用屏幕的一半(因此会有常规视图和新视图).然后我想要一个名为firstView.xib的不同.xib文件并将其加载到containerView中.所以我可以在firstView.xib上有一堆东西和rootView.xib中的一堆不同的东西,并在rootView.xib中加载我的firstView.xib在containerView中,但由于它只占用了屏幕的一半,你仍然可以看到rootView.xib上的东西
xib ×10
ios ×7
storyboard ×3
uiview ×3
xcode ×3
cocoa-touch ×2
objective-c ×2
caching ×1
ios5 ×1
ios6 ×1
iphone ×1
swift ×1
uitableview ×1
xcode4 ×1
xcode4.6 ×1