Xcode 4 не будет отображать главный экран приложения - PullRequest
0 голосов
/ 20 июля 2011

После перехода на 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

Если бы кто-нибудь мог мне здесь помочь, это было бы очень признательно.

1 Ответ

0 голосов
/ 20 июля 2011

Ваш делегат приложения уже имеет окно свойств, viewController и navigationController.Таким образом, у вас может быть приложение : didFinishLaunchingWithOptions: метод, подобный этому,

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    viewController = [[DocumentationViewController alloc] init];
    navigationController = [[UINavigationController alloc] initWithRootViewController:vc];
    navigationController.navigationBarHidden = YES;

    [self.window addSubview:navigationController.view];
    [self.window makeKeyAndVisible];

    return YES;
}
...