我知道之前已经问过这个问题,我花了很多时间跟踪各个主题的建议,不仅仅是在这个网站上,而是无济于事.
我正在为iPad开发一个包含多个视图的应用程序.这些视图中的每一个都包含一个UITableView.一些TableView单元格包含使用UITableViewCell实现的自定义单元格.现在的问题是我可以在iPad模拟器上运行我的应用程序而不会在实际设备上运行.在设备上 - 一旦我尝试访问包含该问题的自定义UITableViewCell的视图,它就会崩溃并显示以下消息:
2011-08-03 20:37:13.849 myApp[658:707] Creating cell: LabledTextFieldCell.xib
2011-08-03 20:37:13.866 myApp[658:707] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </var/mobile/Applications/B9A24738-FA19-4A54-8CE5-813B48E6871E/iCockpit-Client.app> (loaded)' with name 'LabledTextFieldCell.xib''
Run Code Online (Sandbox Code Playgroud)
我检查并重新检查,一切似乎都完好无损.该文件存在 - 在Xcode中以及物理上在文件系统中,并且在代码中以正确的名称引用它.
这是崩溃发生的代码行:
[[NSBundle mainBundle] loadNibNamed:MyIdentifier owner:self options:nil];
Run Code Online (Sandbox Code Playgroud)
在更大的背景下:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
int curRow = indexPath.row;
int i = 0;
if (indexPath.section > 0) {
while (i < indexPath.section) {
curRow = curRow + [self sectionSize:i];
i++;
}
}
UITableViewCell *cellRet;
if …Run Code Online (Sandbox Code Playgroud) 我的任务是动态创建xib文件及其所有参数,如背景颜色.我通过创建xml内容然后编写xib文件来创建xib文件.我只能编码其特定颜色,例如黑色NSRGB标签 -
<object class="NSColor" key="IBUITextColor" id="1026485712">
<int key="NSColorSpace">1</int>
<bytes key="NSRGB">MCAwIDAAA</bytes>
</object>
Run Code Online (Sandbox Code Playgroud)
红色 -
<object class="NSColor" key="IBUITextColor">
<int key="NSColorSpace">2</int>
<bytes key="NSRGB">MC45MzcyNTQ5NjUzIDAgMC4yMDM5MjE1ODYzAA</bytes>
</object>
Run Code Online (Sandbox Code Playgroud)
我不知道如何将其他十六进制颜色代码(#0000CD)转换为此编码颜色的NSRGB(MC45MzcyNTQ5NjUzIDAgMC4yMDM5MjE1ODYzAA).我无法知道为NSRGB颜色代码编码十六进制颜色的标准.
我要切入追逐:我的应用程序已经增长了很多,现在我觉得是时候做一些整理了.我想将我的一些视图从我的MainMenu.xib文件中分离到他们自己的Nib文件中.绊倒我的部分是整个"Interface Builder + My Code"的事情.这是我到目前为止所做的:
我添加了一个视图控制器代理对象:

在Identity检查器中,我已将视图控制器的类名添加到Custom Class字段中.

在" 属性"检查器中,我输入了要加载的笔尖的名称.

我已将视图控制器对象的视图插座连接到MainMenu.xib中的现有视图.

最后,我点击Cmd + R,我的观点不存在.
[在这里插入FFFFUUUUU meme的图像.]
我错过了什么?过去两周我一直盯着我的Mac日复一日,所以如果我完全遗漏了一些东西,我也不会感到惊讶.如果有人看到我的n00b方式,并愿意指出我正确的方向,我会非常感激.谢谢.
我正在开发一款通用应用.
那就是:将iPhone xib转换为iPad xib? 还有:Xcode 4 .xib创建iPad版本.
我是唯一仍然无法将笔尖转换为iPad的人吗?我刷新了Xcode,在"尺寸"下仍然只看到Retina 3.5和Retina 4.我甚至使用了两个SO问题脚本作为答案并仍然保留在相同的iPhone笔尖...
请帮忙!
我正在尝试使用 UICollectionViewController 创建一个类似的 iCalendar。现在我正在尝试添加可重用视图作为每天的列标题。
我制作了一个故事板并添加了一个链接到此类的 UICollectionViewController:
import UIKit
class WeekViewController: UICollectionViewController, UICollectionViewDelegate
{
let dataSource = WeekViewDataSource()
let weekLayout = WeekViewLayout()
override func awakeFromNib() {
var columnHeaderViewNIB = UINib(nibName: "ColumnHeaderView", bundle: nil)
self.collectionView?.registerNib(columnHeaderViewNIB, forSupplementaryViewOfKind: columnHeaderViewIdentifier, withReuseIdentifier: columnHeaderViewIdentifier)
self.collectionView?.collectionViewLayout = weekLayout
self.collectionView?.dataSource = dataSource
super.awakeFromNib()
}
}
Run Code Online (Sandbox Code Playgroud)
ColumnHeaderView nib 实际上是一个 xib 文件,其视图包含单个标签。该视图链接到此类:
import UIKit
class ColumnHeaderView: UICollectionReusableView
{
@IBOutlet weak var label: UILabel!
}
Run Code Online (Sandbox Code Playgroud)
数据源和布局:
import UIKit
class WeekViewDataSource: NSObject, UICollectionViewDataSource {
var events = Array<String>()
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: …Run Code Online (Sandbox Code Playgroud) 在典型的Xcode项目中,您可以从这样的笔尖获取视图:
var objects: NSArray?;
NSBundle.mainBundle().loadNibNamed("ExampleView", owner: nil,
topLevelObjects: &objects)
var view :NSView
for obj in objects! {
if (obj.isMemberOfClass(NSView)) {
view = obj as NSView
}
}
// view is now the NSView object obtained from the nib. Yay.
Run Code Online (Sandbox Code Playgroud)
但是,如果我在同一个Xcode项目中创建一个游乐场并尝试获取视图,则上述代码将失败.实际上,loadNibNamed:owner:topLevelObjects:返回false,我们知道加载nib失败了.
即使我创建一个独立的游乐场,并将.xib文件放在Resources目录中,loadNibNamed:owner:topLevelObjects:仍然返回false.
为什么我不能loadNibNamed:owner:topLevelObjects:用来从操场上访问nib文件?这样做的正确方法是什么?
我得到"无法加载任何Objective-C类信息.这将显着降低可用类型信息的质量." 初始化此类的实例时在控制台中发出警告:
@IBDesignable
class SystemMessage: UIView{
@IBOutlet weak var lbl_message: UILabel!
var view: UIView!
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
func setup(){
view = loadViewFromNib()
view.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]
addSubview(view)
}
func loadViewFromNib() -> UIView{
let bundle = NSBundle(forClass: self.dynamicType)
let nib = UINib(nibName: "SystemMessage", bundle: bundle)
let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
return view
}
}
Run Code Online (Sandbox Code Playgroud)
执行停止let view = nib.instantiateWithOwner..."线程1:EXC_BAD_ACCESS(代码= 2 ...)"
这背后可能的原因是什么?
我有一个奇怪的视图出现在我的 UICollectionViewCell 子类中,它具有 2 个图像视图和 1 个按钮的简单结构。
final class ProfileImageCell:UICollectionViewCell {
static var name: String { return "ProfileImageCell" }
@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var anotherImageView: UIImageView!
func setup(...) { ... }
@IBAction func buttonAction(_ sender: UIButton) { ... }
}
Run Code Online (Sandbox Code Playgroud)
在 setup() 方法中,我设置了 imageViews 并传递了一些属性。我不创建任何视图或更改自我子视图。
然后在我的视图控制器中,我像往常一样设置 collectionView。
collectionView.register(UINib(nibName: ProfileImageCell.name, bundle: nil), forCellWithReuseIdentifier: ProfileImageCell.name)
Run Code Online (Sandbox Code Playgroud)
ProfileImageCell.xib
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: ProfileImageCell.name, for: indexPath) as! ProfileImageCell
cell.setup(...)
return cell
} …Run Code Online (Sandbox Code Playgroud) 虽然编码总是与IBOutlets的保留计数相同的问题出现了:从NIB取消归档对象后保留计数?何时使用@ property's作为IBOutlet?设置时保留或分配?Mac和iPhone之间的差异?
所以我从Apple的文档中读到了The Nib Object Life Cycle.Mac和iPhone上的一些测试应用程序给了我一些奇怪的结果.不过我写了一些规则如何处理这个问题,以便在编码时保持快乐,但现在想要与社区核实并倾听您的意见和经验:
附注:
所以问题是:这是正确和良好的做法吗?
我希望你能批准或纠正它.
我看到了这段代码:
CoolButton *coolButton = [[CoolButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 60.0f, 25.0f)];
[coolButton awakeFromNib];
// ...
[coolButton release];
Run Code Online (Sandbox Code Playgroud)
CoolButton子类UIButton.可以通过awakeFromNib编程方式调用吗?
如果我想要以-[CoolButton awakeFromNib]编程方式创建对象而不是从nib文件创建相同的事情,那么最好的方法是什么?
我应该定义一个方法,并调用它-[CoolButton awakeFromNib]和-[CoolButton initWithFrame]?或者,是否有另一种我应该定义的初始化方法,在两种情况下都会被调用:无论是以CoolButton编程方式还是从nib文件创建?