访问错误-iPhone Xcode 4
我是Xcode和Objective-C的初学者,我想在代码中制作一个没有nib文件的视图控制器,并按照我的意愿塑造它。目前有了这段非常简单的代码,我甚至无法更改背景颜色,因为EXC_BAD_访问 我在网上读到这是一个关于内存管理的问题,但我似乎找不到解决办法。我的代码片段: AppDelegate.h访问错误-iPhone Xcode 4,iphone,objective-c,ios,xcode,Iphone,Objective C,Ios,Xcode,我是Xcode和Objective-C的初学者,我想在代码中制作一个没有nib文件的视图控制器,并按照我的意愿塑造它。目前有了这段非常简单的代码,我甚至无法更改背景颜色,因为EXC_BAD_访问 我在网上读到这是一个关于内存管理的问题,但我似乎找不到解决办法。我的代码片段: AppDelegate.h #import <UIKit/UIKit.h> #import "DefaultViewController.h" @class DefaultViewController; @i
#import <UIKit/UIKit.h>
#import "DefaultViewController.h"
@class DefaultViewController;
@interface AppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
UIViewController *rootViewController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UIViewController *rootViewController;
@end
我通过创建的视图控制器,右键单击->新建文件,UIViewController子类不带xib!在loadView中,我只尝试以下操作:
self.view.backgroundColor = [UIColor redColor];
问题可能是
rootViewController
没有初始化的视图。很难说,因为您没有显示DefaultViewController
的代码。这也可能是DefaultViewController
中的另一个错误
FWIW,您有两个过时的IVAR:
@interface AppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
UIViewController *rootViewController;
}
@接口AppDelegate:NSObject{
UIWindow*窗口;
UIViewController*rootViewController;
}
您可以删除这些,因为您合成了
\u window
和\u rootViewController
,并且从不使用上面的代码。更改代码以使其更安全
self.window.rootViewController = rvc;
[self.window makeKeyAndVisible];
return YES;
您的
DefaultViewController
中有什么?如果未使用nib文件,是否实现了-(void)loadView
你应致电:
UIViewController*rvc=[[DefaultViewController alloc]
initWithNibName:@“yournib”bundle:nil];
加载NIB视图。否则,您的rvc.view将为零。
对不起,我忽略了
答案是:你不应该调用self.view.backgroundColor=[UIColor redColor]由于
self.view
在此阶段首先是nil
,因此-(无效)加载视图中的code>。他必须证明他已经在loadView
中正确创建了至少self.view=[[UIView alloc]init]
。但首先,获取EXC\u BAD\u访问权限的关键问题是,您在loadView中调用self.view.backgroundColor。如果重写loadView,则必须在方法内部构造视图层次结构。通过不在该方法中创建视图层次结构,可以在不存在的视图上调用backgroundColor。相反,完全删除loadView方法或将其注释掉,然后将self.view.backgroundColor移到viewDidLoad方法中。(请记住,即使是空的loadView方法也会有问题,您需要将其删除或注释掉)
第二。。将代码更改为
self.rootViewController = rvc; to self.window.rootViewController = rvc;
顺便说一句,添加视图控制器后,无需再次将rootViewController的视图作为子视图添加到窗口中。将视图控制器指定给rootViewController属性会将视图控制器的视图安装为窗口的内容视图
第三,。初始化DefaultViewController时,您需要
UIViewController *rvc = [[DefaultViewController alloc] init];
不要那样做,而是去做
DefaultViewController *rvc = [[DefaultViewController alloc] init];
我想你需要给我们看一下DefaultViewController的代码。问题明确地说没有使用NIB。我想这个函数是在实际创建视图之后调用的,我想是因为上面的注释吧!谢谢你和其他人!!
DefaultViewController *rvc = [[DefaultViewController alloc] init];