Не удается загрузить NSMutableArray с объектами UIView - PullRequest
1 голос
/ 10 июля 2011

На моей игровой доске (которая называется GameViewController) у меня есть шесть мест (в xib), которые являются не чем иным, как подклассами UIViews (поэтому у меня также есть файлы Seat.h и .m в моем проекте).Когда игровая доска инициализируется, эти места также создаются (благодаря XIB).Я хочу, чтобы места были загружены в NSMutableArray, чтобы я мог использовать их позже.По какой-то причине я не могу заставить его работать.

В моем заголовочном файле GameViewController я добавил NSMutableArray * seat;в качестве переменной экземпляра и включенного @class Seat;выше объявления интерфейса.

В моем методе GameViewController для awakeFromNib у меня есть места = [[NSMutableArray arrayWithCapacity: 6] retain];Поэтому массив должен быть инициализирован при появлении игровой доски.

Затем в заголовочном файле Seat я включил контроллер GameViewController *;в качестве переменной экземпляра и включил @class GameViewController над объявлением интерфейса.Я также добавил и синтезировал свойство для GameViewController.

В методе Seake awakeFromNib у меня есть [controller registerSeat: self];

Это вызывает метод в моем GameViewController, который имеет только одинстрока: [места addObject: место];Это должно добавить место в массиве.Но по какой-то причине этот метод никогда не вызывается.Или, если это произойдет, я никогда не могу сказать.Когда я отлаживаю, фокус никогда не переходит к методу registerSeat, хотя места добавляются на доску.Я надеюсь, что все это имеет смысл.Если код нужен, я могу его предоставить.Это может быть проще сделать в любом случае.Что, вы парни, думаете?Я в тупике на данный момент.

Объявление метода выглядит следующим образом: - (void) registerSeat: (Seat *) seat;

GameViewController.h:

#import <UIKit/UIKit.h>

@class Seat;

@interface GameViewController : UIViewController {

  NSMutableArray *seats;

}

- (void) registerSeat:(Seat *)seat;

@end

GameViewController.m

#import "GameViewController.h"
#import "Seat.h"

@implementation GameViewController

- (void)awakeFromNib {

 seats = [[NSMutableArray arrayWithCapacity:6] retain];

}

- (void) registerSeat:(Seat *)seat {

  [seats addObject:seat];
  NSLog(@"seat has been registered");

}

@end

Seat.h:

#import <UIKit/UIKit.h>

@class GameViewController;

@interface Seat : UIView {

  GameViewController *controller;

}

@property (nonatomic, retain) IBOutlet GameViewController *controller;

@end

Seat.m:

#import "Seat.h"
#import "GameViewController.h"

@implementation Seat

@synthesize controller;

- (void) awakeFromNib {

  [controller registerSeat:self];

}

@end

1 Ответ

1 голос
/ 11 июля 2011

То, что вы делаете здесь - это то, для чего предназначен Xcode 4 IBOutletCollection.В вашем NIB выберите все ваши Seat представления (они должны называться SeatView, кстати. Seat должен быть классом модели, а не классом представления).Перетащите выбранную группу в заголовок GameViewController и запросите IBOutletCollection.Это свяжет их все в случайном порядке.(Почему они решили сделать это случайным образом упорядоченным массивом, я не знаю; это несколько безумная конструкция, но она точно соответствует тому, что вы пытаетесь сделать выше.)

Как отмечает @highlycaffeinated, наиболеепричина вашего текущего сбоя кода в том, что вы не подключили свой controller, и он nil.Когда в Objective-C «ничего не происходит», это происходит почти всегда, потому что вы разговариваете с nil.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...