【发布时间】:2011-06-17 23:48:07
【问题描述】:
我一直在尝试理解视图控制器和视图,即使在观看了 iTunesU 上的一些类之后,我仍然无法以编程方式实现它们。我希望有人能澄清一下。
所以我正在尝试创建一个 UIViewController 来创建它的视图。
该程序分为以下几类: ProgramNameAppDelegate.h 和 .m ApplicationRootViewController.h 和 .m
从 AppDelegate,我创建了 UIWindow 和 UIViewController。部分代码如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
_window = [ [UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
if (!_window)
{
[self release];
return NO;
}
_rootViewController = [ [ApplicationRootViewController alloc] init];
if (!_rootViewController)
{
NSLog(@"No _rootViewController");
[self release];
return NO;
}
[_window addSubview:[_rootViewController view]];
[_window makeKeyAndVisible];
return YES;
}
在 ApplicationRootViewController 我调用 init。我的 UIView 是在 loadView 中创建的:
- (void)loadView
{
NSLog(@"In loadView");
[super loadView];
CGRect _frame = [[UIScreen mainScreen] applicationFrame];
UIView* _rootView = [[UIView alloc] initWithFrame:_frame];
[_rootView setBackgroundColor:[UIColor redColor]];
self.view = _rootView;
return;
}
我遇到的问题显然是程序正在创建视图,但是,在应用程序退出活动之前,它永远不会显示我创建的视图。一旦我退出应用程序并返回,视图就在那里。我尝试了其他几种方法,但它的行为总是相同的。
我最终希望控制器从子类 UIView.h 和 .m 文件创建视图。
谢谢,
凯文
【问题讨论】:
-
有些东西你没有发布或提到,因为你的代码对我来说很好用。顺便说一句,您在这里有泄漏: self.view = _rootView;你必须释放 _rootView
-
是的,我发现了内存泄漏。其余的代码是相当罐头的东西。我解决了这个问题,但我仍然不知道发生了什么。我正在使用最新的 XCode 预览版(尽管我认为这与它无关)。我废弃了代码并在当前的 XCode 中重写了它,现在一切正常。我花了一天时间拔头发。感谢您查看它。
-
您的 loadView 何时何地被调用?
-
你为什么在名字中使用所有这些下划线?
-
dasdom,这只是一个命名约定。我很容易知道我通过下划线创建了哪些变量。
标签: iphone model-view-controller ios uiview uiviewcontroller