无法在包中加载 Nib - 错误的 nibname 错误
Posted
技术标签:
【中文标题】无法在包中加载 Nib - 错误的 nibname 错误【英文标题】:Could not load Nib in bundle - Wrong nibname in error 【发布时间】:2014-08-11 21:23:14 【问题描述】:我正在尝试推送使用 xib 文件初始化的 ViewController 的视图。为此,我调用了我的控制器的初始化程序,它称自己为initwithnibname:bundle:
以加载正确的 xib 文件。问题是我收到以下错误
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法在包中加载 NIB:[...] 名称为“BYZ-38-t0r-view-x4c-fw-L1g”
错误中的 nib 名称与初始化程序调用中提供的 nib 名称不匹配。
这是我的代码:
ViewController 声明/初始化
let connexionViewController = ConnexionViewController()
self.view.addSubview(connexionViewController.view) // Exception thrown on this line
ViewController 代码
import Foundation
import UIKit
class ConnexionViewController: UIViewController
@IBOutlet var validateButton: UIButton!
@IBOutlet var usernameTextField: UITextField!
required init(coder: NSCoder)
super.init(coder: coder)
override init()
super.init(nibName: "ConnexionViewController", bundle: nil)
override init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!)
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
override func viewDidLoad()
super.viewDidLoad()
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
xib 文件的名称与提供给初始化程序的字符串匹配,并且 xib 被添加到实际目标的构建阶段。
【问题讨论】:
【参考方案1】:ViewController * pvc = [[ViewController alloc]initWithNibName:NSStringFromClass([ViewController class]) bundle:nil];
我以这种方式加载笔尖以避免字符串。
这反过来又开始返回 nib 名称为 myproject.ViewController
,以便为现有的 objC 项目添加快速兼容性以进行混合和匹配。
要对此进行排序,请使用以下代码或执行字符串处理以裁剪字符串直到.
ViewController * pvc = [[ViewController alloc]initWithNibName:@"ViewController" bundle:nil];
希望这对将来的人有所帮助。
【讨论】:
【参考方案2】:推送新控制器时,导航控制器似乎没有完全初始化。我更改了通话位置,现在可以正常使用了。
【讨论】:
补充一点:如果您在框架内初始化 nib,则需要使用有效的包(即 ConnexionViewController.self)而不是 nil。以上是关于无法在包中加载 Nib - 错误的 nibname 错误的主要内容,如果未能解决你的问题,请参考以下文章
MonoTouch - 无法在包中加载 NIB:“NSBundle”
自定义单元格导致“NSInternalInconsistencyException”,原因:“无法在包中加载 NIB: