在我的遊戲板(稱爲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'方法中。 –