无法使用UIView对象加载NSMutableArray

时间:2011-07-10 15:32:23

标签: xcode nsmutablearray

在我的游戏板(称为GameViewController)上,我有六个座位(在xib中),它们只是子类化的UIViews(所以我的项目中也有Seat.h和.m文件)。当游戏板初始化时,这些座位也会被创建(感谢xib)。我想把座位加载到NSMutableArray中,以便我以后可以使用它们。出于某种原因,我无法让它发挥作用。

在我的GameViewController头文件中,我添加了NSMutableArray *席位;作为实例变量并包含@class Seat;在接口声明之上。

在我的GameViewController的awakeFromNib方法中,我有座位= [[NSMutableArray arrayWithCapacity:6] retain];因此,当游戏板出现时,应该初始化阵列。

然后在我的Seat头文件中,我已经包含了GameViewController * controller;作为实例变量并在接口声明上面包含@class GameViewController。我还为GameViewController添加并合成了一个属性。

在Seat的awakeFromNib方法中,我有[controller registerSeat:self];

这会调用我的GameViewController中只有一行的方法:[seat addObject:seat];这应该将座位添加到阵列。但由于某些原因,这种方法似乎永远不会被调用。或者如果确实如此,我永远无法分辨。当我调试时,即使座位确实添加到电路板上,焦点也永远不会转到registerSeat方法。我希望这一切都有道理。如果需要代码,我可以提供。无论如何,这可能更容易。你们有什么感想?我此刻难过。

方法声明如下: - (无效)registerSeat :(座位*)座位;

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 个答案:

答案 0 :(得分:1)

你在这里做的是Xcode 4的IBOutletCollection旨在解决的问题。在您的NIB中,选择所有Seat视图(这些视图应称为SeatView,BTW。Seat应为模型类,而不是视图类。将所选组拖到GameViewController标题并请求IBOutletCollection。这将把它们全部连接成一个随机排序的数组。 (为什么他们选择使它成为一个随机排列的数组超出了我;它是一个有点疯狂的结构,但它完全匹配你在上面尝试做的。)

作为@highlycaffeinated说明,您当前代码失败的最可能原因是您未能为controllernil连线。当Objective-C中“没有任何反应”时,几乎总是因为你正在与nil交谈。