在我的游戏板(称为GameViewController)上,我有六个席位(在xib中),它们只不过是子类UIViews(所以我也有Seat.h和.m文件在我的项目中)。当游戏板被初始化时,这些座位也被创建(感谢xib)。我想将这些席位加载到NSMutableArray中,以便稍后使用它们。出于某种原因,我无法让它工作。无法加载UIView对象的NSMutableArray
在我的GameViewController头文件中,我添加了NSMutableArray * seats;作为实例变量并包含@class Seat;接口声明之上。我的座席= [[NSMutableArray arrayWithCapacity:6] retain];我的座席= [[NSMutableArray arrayWithCapacity:6]保留];在我的awakeFromNib方法的GameViewController。所以当游戏板出现时应该初始化数组。
然后在我的Seat头文件中包含了GameViewController *控制器;作为实例变量并在接口声明之上包含@class GameViewController。我还为GameViewController添加并合成了一个属性。
在座椅的awakeFromNib方法中我有[controller registerSeat:self];
这调用了我的GameViewController中只有一行的方法:[seats addObject:seat];这应该将座位添加到阵列。但由于某种原因,这个方法似乎永远不会被调用。或者如果是这样,我永远不会说。当我进行调试时,即使席位被添加到板上,焦点也不会进入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
“但由于某种原因,这种方法似乎永远不会被调用,或者如果是这样,我永远无法说出。”尝试在'[controller registerSeat:self]'方法调用中设置一个断点,并查看它是否停在那里。然后逐步查看它从那里出发的位置。 –
我已经这样做了,而且它确实在那里停止。但是,当我通过它时,似乎深入了解框架。一个我完全不熟悉的领域。我不得不点击按钮进入按钮,它只是继续下去,看起来像内存地址的列表,我不能到列表的末尾。等等,实际上,当它停在那条线上时,我点击Step Into,焦点实际上移过了那条线,直到我点击Step Into按钮时,它开始向下。所以也许它不会调用这个函数,只是跳过它而已。 – dutsnekcirf
好的,尝试在你的'registerSeat'方法的第一行添加另一个断点。看看这是否受到打击。事实上,你应该能够在第一个断点处点击Step Over,如果它确实被调用,它应该仍然停在'registerSeat'方法中。 –