После перехода на Xcode 4 я подумал, что смогу построить и запустить свое приложение точно так же, как в Xcode 3.
Оказывается, я не могу.
Xcode 4 имеет забавный способ никогда не показывать контроллер представления приложения, что странно.
Я могу сказать, что Apple в конечном итоге заставит нас переключиться, что приведет к неработоспособности моего приложения.
Добирается до application:didFinishLaunchingWithOptions:
без ошибок, перед зависанием. В конце концов приложение падает на устройстве - но всегда остается на Default.png в симуляторе.
Я подумал, что могу пойти и отредактировать метод application:didFinishLaunchingWithOptions:
, чтобы создать экземпляр самого контроллера представления и добавить его в окно - только для того, чтобы показать, что он тоже не работает.
После многочисленных неудачных попыток - создания отдельных окон UIWindows для контроллера основного вида - я решил добавить его в контроллер навигации.
Тогда удача поразила меня - но только в самых простых формах. Я заглянул в журнал и увидел, что applicationDidBecomeActive:
был вызван.
Но, как обычно, не повезло с отображением любого вида.
Затем я решил посмотреть, смогу ли я добавить в окно UIView с синим цветом фона и несколькими элементами пользовательского интерфейса (кнопки, метки и т. Д.) И посмотреть, сработает ли это.
Как ни странно, это было.
Но почему не для контроллера основного вида? Ни разу в Xcode 4 мне не удавалось успешно запустить приложение (даже открыть его после того, как оно было скомпилировано) не удается. Я попытался изменить компилятор так же, как в Xcode 3, не повезло.
Я, честно говоря, очень смущен тем, почему контроллер представления приложения не отображается.
Для тех, кто хочет дать ему попытку понять, почему он не работает, это будет с благодарностью.
Вот код для AppDelegate, если вам нужен код для контроллера представления, я могу вставить его сюда, однако это более 2000 строк.
В любом случае, вот файл .m:
#import "DocumentationAppDelegate.h"
#import "DocumentationViewController.h"
@implementation DocumentationAppDelegate
@synthesize window;
@synthesize viewController;
@synthesize navigationController;
- (void)applicationWillEnterForeground:(UIApplication *)application {
NSLog(@"In method %@, which is in class %@.", NSStringFromSelector(_cmd), NSStringFromClass([self class]));
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
NSLog(@"In method %@, which is in class %@.", NSStringFromSelector(_cmd), NSStringFromClass([self class]));
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"In method %@, which is in class %@.", NSStringFromSelector(_cmd), NSStringFromClass([self class]));
DocumentationViewController *vc = [[DocumentationViewController alloc] init];
UINavigationController *controller = [[UINavigationController alloc] initWithRootViewController:vc];
controller.navigationBarHidden = YES;
UIWindow *win = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[win addSubview:controller.view];
[win makeKeyAndVisible];
return YES;
}
- (void)applicationWillTerminate:(UIApplication *)application {
}
- (void)dealloc {
[window release];
[super dealloc];
}
@end
и .h
#import <UIKit/UIKit.h>
@class DocumentationViewController;
@interface DocumentationAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
DocumentationViewController *viewController;
UINavigationController *navigationController;
}
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet DocumentationViewController *viewController;
@end
Если бы кто-нибудь мог мне здесь помочь, это было бы очень признательно.