【发布时间】:2010-11-10 05:34:25
【问题描述】:
能否解释一下如何正确子类化 UIViewController,然后在不使用 nib 的情况下将其加载到窗口中。
我是否需要设置视图以及何时设置?加载视图?
当我使用我的 customUIViewController 子类时,我的应用程序崩溃了。一切都加载找到,直到我点击一个按钮,它与“错误访问”有关
GettingStarted *vc = [[GettingStarted alloc] init];
UISplitViewController *split = self.splitViewController;
NSArray *vcArray = split.viewControllers;
NSLog(@"viewcontroll cout:%d", vcArray.count);
// this line of code crashes my app. I fi comment it out everything works fine
UINavigationController *detailViewController = (UINavigationController*)[vcArray objectAtIndex:1];
//
detailViewController pushViewController:vc animated:YES];
[vc release];
GettingStarted.m
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
[self.navigationItem setHidesBackButton:YES animated:YES];
//UIView *baseView = [[UIView alloc] init];
[[self navigationItem] setTitle:@"Getting Started"];
UIImageView *noUsersIV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"no_users.png"]];
[noUsersIV setFrame:CGRectMake(0.0f, 0.0f, 466, 961.0f)];
[noUsersIV setHidden:NO];
[noUsersIV setTag:1006];
[[self view] addSubview:noUsersIV];
[noUsersIV release];
UIButton *btnAddUser = [UIButton buttonWithType:UIButtonTypeCustom];
[btnAddUser setImage:[UIImage imageNamed:@"no_users_button_standard.png"] forState:UIControlStateNormal];
[btnAddUser setImage:[UIImage imageNamed:@"no_users_button_activated.png"] forState:UIControlStateSelected];
[btnAddUser addTarget:self action:@selector(addUser:) forControlEvents:UIControlEventTouchUpInside];
[btnAddUser setFrame:CGRectMake(0, 428,466, 124)];
[[self view] addSubview:btnAddUser];
[btnAddUser release];
//self.view = baseView;
//[baseView release];
}
【问题讨论】:
-
它抱怨“访问不正确”,因为您在某处搞砸了内存管理。查看 GDB 中的回溯以了解崩溃发生的位置。这将为您提供有关您忘记保留/过度释放的对象的有力线索。
-
细节太少了。如果您可以看到视图和按钮,那么您可能正在正确的位置(loadView)创建东西,但是对象的保留计数很差。发布您的 loadView 代码。
-
更新了帖子。如果我注释掉我抓取 UINavigationController 的那一行,那么一切正常
标签: objective-c ios4