Ошибка XCode: несовместимые типы Objective C. Ожидаемая структура struct UIView - PullRequest
2 голосов
/ 06 марта 2011

Я запускаю приложение с несколькими представлениями: NewGame и Players.Я думал, что все настраивал правильно, но, видимо, нет.

MainViewController.h

#import <UIKit/UIKit.h>

@class NewGame; @class Players;

@interface MainViewController : UIViewController {
    IBOutlet NewGame *newGameController;
    IBOutlet Players *playersController;
}

-(IBAction) loadNewGame:(id)sender;
-(IBAction) loadPlayers:(id)sender;

-(void) clearView;

@end

MainViewController.m

#import "MainViewController.h"
#import "NewGame.h"
#import "Players.h"

@implementation MainViewController

-(IBAction) loadNewGame:(id)sender {
    [self clearView];
    [self.view insertSubview:newGameController atIndex:0];
}

-(IBAction) loadPlayers:(id)sender {
    [self clearView];
    [self.view insertSubview:playersController atIndex:0];
}

-(void) clearView {
    if (newGameController.view.superview) {
        [newGameController.view removeFromSuperview];
    } else if (playersController.view.superview) {
        [playersController.view removeFromSuperview];
    }
}

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [self loadNewGame:nil];
    [super viewDidLoad];
}

Пара изображений ...

http://i.stack.imgur.com/GwXMa.png http://i.stack.imgur.com/XHktH.png

Ответы [ 3 ]

1 голос
/ 06 марта 2011

Вид - это объекты, представляющие то, что появляется на экране. Контроллеры представлений - это объекты, которые выполняют логику приложения, связанную с этими представлениями. иерархия представлений представляет собой набор представлений.Вы пытаетесь добавить контроллер представления в иерархию представления, как если бы это был фактически вид.

Грубо говоря, у вас должен быть один контроллер представления для каждого «экрана» вашего приложения.Этот контроллер представления может управлять любым количеством представлений.Его основной вид доступен через его свойство view.

Быстрое решение для обеспечения работоспособности вашего приложения - добавить основной вид ваших контроллеров представления вместо самих контроллеров представления.Так, например, это:

[self.view insertSubview:playersController atIndex:0];

... станет следующим:

[self.view insertSubview:playersController.view atIndex:0];

Сказав это, это не является хорошим решением в долгосрочной перспективе, и вы должны исследоватьболее структурированный способ организации переходов от контроллера представления к контроллеру представления.UINavigationController хороший вариант для начинающих.

0 голосов
/ 06 марта 2011

NewGame и игроки должны иметь подкласс UIView. Если это ViewControllers, а не UIViews, вам нужно использовать newGameController.view вместо newGameController.

0 голосов
/ 06 марта 2011

Полагаю, playerController - это контроллер представления. Затем добавьте

[self.view addSubview: playerController.view];

ИЛИ если нет, то подкласс их для UIView

...