Окно отображается, но не может взаимодействовать с симулятором - PullRequest
0 голосов
/ 05 ноября 2011

Я читаю Программирование iOS4 от O'Rielly и использую немного более новую версию XCode, чем та, которую использует книга.Однако это небольшое изменение привело к некоторой путанице, потому что я не могу создать приложение на основе окна, используя XCode 4.2.

Во всяком случае, я запустил пустой проект, который дал мне структуру barebone для приложения iPhone безMainWindow.xib.Мне уже дали делегата проекта .h и .m.Я приступил к созданию собственного MainWindow.xib.Я понял, что мне нужно было установить «Основное имя файла основного пера» на «MainWindow», чтобы мой перо появилось вообще, и я сделал это.

Внутри моего MainWindow.xib я добавил кнопку под объектом окна, чтобы убедиться, что у меня есть то, что я хочу, когда я запускаю проект.Это состояние моего пера прямо сейчас

MainWindow.xib

Не внося никаких изменений в AppDelegate.h и AppDelegate.m, я создал и запустил свой проект.Я смог увидеть кнопку!ОДНАКО, я не мог нажать на кнопку, и когда я нажал кнопку «Домой» и возобновил свое пустое приложение, я больше не мог видеть кнопку!Вот некоторые файлы, в которые я не вносил никаких изменений:

main.m

#import <UIKit/UIKit.h>

#import "EmptyWindowAppDelegate.h"

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([EmptyWindowAppDelegate class]));
    }
}

EmptyWindowAppDelegate.m

#import "EmptyWindowAppDelegate.h"

@implementation EmptyWindowAppDelegate

@synthesize window = _window;
@synthesize managedObjectContext = __managedObjectContext;
@synthesize managedObjectModel = __managedObjectModel;
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}
//...Omitted

Ответы [ 2 ]

0 голосов
/ 07 июля 2013

Я думаю, что проблема в этой строке в AppDelegate.m:

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

Что происходит, когда приложение запускается, вы создаете новое окно с пустым белым фоном и отображаете его.Поскольку вы уже создали окно в Интерфейсном Разработчике, вам не нужно делать это снова в коде.Все, что вам нужно в didFinishLaunching ..., это:

[self.window makeKeyAndVisible];
return YES;

Затем измените "@synthesize window = _window;"просто прочитать "@synthesize window;"

Следующим шагом является изменение файла AppDelegate.h.Измените свой код так, чтобы он выглядел следующим образом.

@interface AppDelegate : UIResponder <UIApplicationDelegate>
{

}
@property (strong, nonatomic) UIWindow *window;

Теперь, что вы можете сделать в InterfaceBuilder, это связать свойство окна в AppDelegate.m с созданным вами окном.Как только вы создали свойство окна, оно будет отображаться в разделе Outlets для EmptyWindowAppDelegate.щелкните и перетащите с пустого круга на метку окна на боковой панели или прямо на окно, которое вы спроектировали на экране.

Удачи

0 голосов
/ 05 ноября 2011

Вы можете указать имя основного файла пера в списке приложений (по умолчанию это MainWindow.xib).

Для дальнейшего изучения проблемы вы можете просто создать приложение на основе представления по умолчанию и посмотреть, чторазличия есть.Мне кажется, что вы не установили связь в конструкторе интерфейсов между свойством окна вашего делегата приложения и вашим оконным объектом IB.Это означает, что это окно в didFinishLaunchingWithOptions, вероятно, будет равно нулю, и поэтому отправленные вами сообщения не будут иметь никакого эффекта.

...