当我试图运行我正在构建的iPhone应用程序时,构建成功但应用程序在启动图像后崩溃,并给出了一个如下所示的错误:
2011-04-06 20:31:38.562我的应用程序[3438:207] *由于未捕获的异常'NSInternalInconsistencyException'终止应用程序,原因:' - [UIViewController _loadViewFromNibNamed:bundle:]加载了"GalleryView"笔尖,但视图出口是没有设置.'
我无法弄清楚这里发生了什么..请帮忙!
我的目标是 iOS(设备和模拟器)并设置 CMake 以添加捆绑包中所需的不同资源。“xib”文件给我带来了一些问题。如果我不采取进一步操作,iPhone/iPad 模拟器运行将失败并出现错误:
Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: 'Could not load NIB in bundle:
'NSBundle </Users/danieldekkers/Library/Application Support/iPhone Simulator/4.3.2/Applications/1C29638B-7593-4311-8F94-C8051AF90AD7/Discs.app>
(loaded)' with name 'MainWindow''
Run Code Online (Sandbox Code Playgroud)
捆绑包中缺少 NIB 文件。一个示例 (http://www.vtk.org/Wiki/CMake:OSX_InterfaceBuilderFiles) 显示,对于 OSX,您必须将 xib 文件编译为 nib 文件,并将这些文件作为构建后步骤添加到捆绑包中。所以我的猜测是 iOS 也有类似的情况。但我的问题是,...我在哪里添加编译好的 nib 文件?
我现在在 CMakeLists.txt 中执行此操作:
# We need to compile the interface builder *.xib files to *.nib files to add to the bundle
# Make sure we can find the 'ibtool' program. If we can NOT find it we skip generation …Run Code Online (Sandbox Code Playgroud) 我使用Xcode模板创建了一个新的空白标准应用程序.删除了MainMenu.xib中的窗口,我用xib创建了一个新的自定义NSWindowController子类.
它们被命名为"WYSunFlowerWindowController.h"和"WYSunFlowerWindowController.m".
然后我添加init函数,如下所示:
- (id)init
{
NSLog(@"init()");
return [super initWithWindowNibName:@"WYSunFlowerWindowController" owner:self];
}
Run Code Online (Sandbox Code Playgroud)
我的WYAppDelegate.m文件如下所示:
static WYSunFlowerMainWindowController* windowController = nil;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
if (windowController == nil) {
windowController = [[WYSunFlowerMainWindowController alloc] init];
}
[[windowController window] makeKeyAndOrderFront:windowController];
}
Run Code Online (Sandbox Code Playgroud)
我有问题,在我启动应用程序后,窗口无法自我显示.谁能告诉我为什么?我的代码有什么问题吗?
我是Objective-C和可可的新手.所以我想我可能犯了一个愚蠢的错误,我自己无法弄明白.
更新:
这是我的项目来源.请看看,帮我弄清楚我的错误是什么.
当我在模拟器上测试应用程序时,我得到以下内容:
抛出Objective-C异常.名称:NSInternalInconsistencyException原因:无法在bundle中加载NIB:'NSBundle <...>(已加载)',名称为"... Controller"
但是当我使用实际设备时一切都很好.
有任何想法吗?
我很想知道是否有人有任何经验将iPhone应用程序的加载时间性能与NIB中显示的视图与完全以编程方式布局的视图进行比较(即实例化UITextView,将其添加到视图中,实例化UIButton,将其添加到视图中...).
如果我想要一个简单的应用程序快速加载闪电,最好放弃使用NIB(技术上是XIB),而是以编程方式创建视图元素?加载和解析NIB所花费的时间是否足以产生明显的差异?
是否可以按需编程隐藏停靠图标.我知道在plist中定义属性"Application is agent(UIElement)"的一种方法我们将cocoa应用程序作为用户代理.但这会导致永久隐藏停靠图标.
我正在寻找一种方法,我可以控制停靠图标的可见性.任何的想法 ?
我在使用UINib时遇到了一些奇怪的事情,尽管我怀疑真正的问题可能会被埋没在其他地方.
我的应用程序正在使用tableview,由于它们的复杂性,已在Interface Builder中准备了单元格的内容.对于新单元(与重用单元相对),使用UINib类实例化nib的内容.因为每个单元只有一个nib用于减少每次加载文件的开销,所以我cellNib在我的viewcontroller子类中添加了一个UINib作为属性,我在viewDidLoad的实现中加载了一次.
现在是奇怪的部分.一切都工作正常,tableview填充了它的数据,所有单元格都设置了nib的内容.但是当我滚动tableview时,应用程序崩溃了.
callstack给出了这个:- [NSCFNumber instantiateWithOwner:options:]:发送到实例的无法识别的选择器
显然,再次从cellNib实例化内容的消息已被发送到错误的对象.发送消息的对象不时会有所不同,因此会随机发生一些事情.
我不明白 - 为什么在加载tableview时它会工作大约10次,但是当滚动tableview时它不再工作了?
如果我每次都创建一个新的UINib实例(如下面的代码所示),那么一切正常,包括滚动.
我在哪里弄错了?我的UINib属性的指针是否会变形?如果是这样,为什么?
这是我正在使用的代码(我删除了所有数据加载和其他东西,使其更容易阅读):
@interface NTDPadViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {
NSManagedObjectContext *managedObjectContext;
NSMutableArray *ntdArray;
IBOutlet UITableView *ntdTableView;
UINib *cellNib;
}
@property(nonatomic,retain) NSManagedObjectContext *managedObjectContext;
@property(nonatomic,retain) NSMutableArray *ntdArray;
@property(nonatomic,retain) UITableView *ntdTableView;
@property(nonatomic,retain) UINib *cellNib;
@end
Run Code Online (Sandbox Code Playgroud)
实施:
@implementation NTDPadViewController
@synthesize managedObjectContext;
@synthesize ntdArray;
@synthesize ntdTableView;
@synthesize cellNib;
-(void)viewDidLoad {
[super viewDidLoad];
cellNib = [UINib nibWithNibName:@"NTDCell" bundle:nil];
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString …Run Code Online (Sandbox Code Playgroud) 如果我正在编辑我从应用程序反编译的nib文件(https://github.com/akahan/Nib-Decompiler),我该如何将其重新编译为原始的不可编辑的nib格式,以便我可以将其重新编译进入申请?
我创建了一个没有.xib文件的UIViewController子类,以为我不需要它.现在我意识到它会非常有用,但我不确定如何添加.xib文件.有人可以帮忙吗?
因此,NSViewController使用xib/nib 创建自定义子类.然后在app的主nib中,NSViewController从对象库中添加一个对象,将该类设置为自定义视图控制器类.IBOutlet在自定义视图控制器的应用程序委托中创建.
将NSView对象添加到窗口.将视图控制器的视图设置为窗口中的视图NSView.
当我构建和运行时,视图是主笔尖中的通用视图,而不是视图控制器的笔尖中的视图...
还有什么需要让这个过程按照我的想法运作?我认为这应该从自定义视图控制器的笔尖填充视图(和任何子视图).
我知道如何在代码中执行此操作,但它确实看起来像锅炉板.(特别是添加了自动布局约束.)
请告诉我,我错过了一些愚蠢明显的东西.
nib ×10
cocoa ×4
xib ×4
iphone ×3
objective-c ×3
xcode ×3
ios ×2
macos ×2
cmake ×1
cocoa-touch ×1
nsbundle ×1
nsview ×1
pointers ×1
user-agent ×1
xamarin ×1
xamarin.ios ×1