Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问错误-iPhone Xcode 4_Iphone_Objective C_Ios_Xcode - Fatal编程技术网

访问错误-iPhone Xcode 4

访问错误-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

我是Xcode和Objective-C的初学者,我想在代码中制作一个没有nib文件的视图控制器,并按照我的意愿塑造它。目前有了这段非常简单的代码,我甚至无法更改背景颜色,因为EXC_BAD_访问

我在网上读到这是一个关于内存管理的问题,但我似乎找不到解决办法。我的代码片段:

AppDelegate.h

#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];