gpt4 book ai didi

objective-c - 有人可以解释将 UIViewController 子类化的正确方法吗

转载 作者:行者123 更新时间:2023-12-04 06:41:55 29 4
gpt4 key购买 nike

可以解释一下如何正确地对 UIViewController 进行子类化,然后在不使用 Nib 的情况下将其加载到窗口中。

我需要设置 View 吗?什么时候设置?加载 View ?

当我使用 customUIViewController 子类时,我的应用程序崩溃。一切都加载了 find 直到我单击一个按钮,它才显示“访问错误”

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

入门.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];

}

最佳答案

您的日志消息的结果是什么?您确定该数组中有 >=2 个对象吗?

崩溃是否发生在调用堆栈上的 pushNavigationController 上,还是稍后发生?

您也不需要释放 split、vcArray 或 detailViewController。 [detailViewController release] 肯定会导致崩溃。其他人稍后会导致崩溃。

当函数返回对象时,除非您对其调用保留,或者返回对象的函数名为 alloc/copy/create ,该对象将自动释放,因此您 不需要释放它。

someArray = [NSArray arrayWithObjects:...]; // no need to release
someArray = someClass.array; // no need to release

someArray = [[NSArray alloc] init]; // alloc, need to release
someArray = [[NSArray arrayWithObjects:...] retain]; // retained, need to release

在上面的第二个示例中调用保留的原因是,如果您希望在此函数之外使用对象。如果你需要保留它,否则它会在以后自动释放。

更新:您在添加按钮时遇到了类似的问题。

关于objective-c - 有人可以解释将 UIViewController 子类化的正确方法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4141521/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com