在我的游戏板(称为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
答案 0 :(得分:1)
你在这里做的是Xcode 4的IBOutletCollection
旨在解决的问题。在您的NIB中,选择所有Seat
视图(这些视图应称为SeatView
,BTW。Seat
应为模型类,而不是视图类。将所选组拖到GameViewController
标题并请求IBOutletCollection
。这将把它们全部连接成一个随机排序的数组。 (为什么他们选择使它成为一个随机排列的数组超出了我;它是一个有点疯狂的结构,但它完全匹配你在上面尝试做的。)
作为@highlycaffeinated说明,您当前代码失败的最可能原因是您未能为controller
和nil
连线。当Objective-C中“没有任何反应”时,几乎总是因为你正在与nil
交谈。