【发布时间】:2022-01-02 06:24:15
【问题描述】:
我似乎无法在我创建的框架中加载 nib 文件。问题是我在它上面工作了一个多月,它工作得很好。 2周后我今天再次打开它,它只是崩溃了。我简直不敢相信。
我创建了一个小样本project,我可以在其中重现该问题。
获取我正在使用的捆绑包
let bundle = Bundle(identifier: "com.nibFramework.NibFramework")
顺便说一句,这将返回 nil。
所以我尝试了
let bundle = Bundle(for: MyNib.self)
使用笔尖
let nib = UINib(nibName: "\(MyNib.self)", bundle: bundle)
let array = nib.instantiate(withOwner: self, options: nil)
这在instantiate 上崩溃了。
Error
2021-11-23 23:55:52.381944+0530 NibApp[7432:2147418] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </private/var/containers/Bundle/Application/7817FD25-54BC-4920-AC67-49D246D28794/NibApp.app> (loaded)' with name 'MyNib''
*** First throw call stack:
(0x1827f904c 0x19ae6df54 0x182850180 0x18513f338 0x1040b0d9c 0x1040af164 0x1040af1c0 0x184db415c 0x184db6c10 0x184d896a4 0x184ecc4d8 0x184e21da0 0x184eb8f84 0x184ed3598 0x184c594a0 0x184f5f584 0x185260400 0x184f61c80 0x184ea10b4 0x1942f0e20 0x194316cdc 0x1942d16b4 0x1942d2cf4 0x10441e3b4 0x104421e70 0x1942d2f94 0x1942d23d4 0x1942d69e4 0x18281b020 0x18282bce0 0x182766054 0x18276b7f4 0x18277f3b8 0x19e10f38c 0x18511f6a8 0x184e9e7f4 0x199e98184 0x1040afcb8 0x1040afc40 0x1040afd38 0x104325a24)
libc++abi: terminating with uncaught exception of type NSException
dyld4 config: DYLD_LIBRARY_PATH=/usr/lib/system/introspection DYLD_INSERT_LIBRARIES=/Developer/usr/lib/libBacktraceRecording.dylib:/Developer/usr/lib/libMainThreadChecker.dylib:/Developer/Library/PrivateFrameworks/DTDDISupport.framework/libViewDebuggerSupport.dylib
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </private/var/containers/Bundle/Application/7817FD25-54BC-4920-AC67-49D246D28794/NibApp.app> (loaded)' with name 'MyNib''
terminating with uncaught exception of type NSException
我使用的是 Xcode 13.1。这个框架的Mach-O Type设置为Static Library。
很确定我错过了一些简单的事情。就是想不通是什么。感谢您的帮助。
【问题讨论】:
-
您首先做了一些好的方法。尝试使用它提供的标准路径查看 Bundle 输出的内容。当 nib 在框架中时,检查
NSString *privatePath = [[NSBundle mainBundle] privateFrameworksPath];sorry objc 的输出。因为框架的东西不在资源文件夹中,所以标准查找不能按原样工作。 -
@OlSen 运行该代码给了我
/private/var/containers/Bundle/Application/69CA5508-5C73-4309-BEC8-91C958069808/NibApp.app/Frameworks。所以我使用let bundle = Bundle(path: path),但它仍然崩溃。 -
可以使用SPM吗?使用 SPM,您将拥有
Bundle.module的模块资源
标签: ios swift objective-c xcode xcframework