私のゲームボード(GameViewControllerと呼ばれています)には、6つのSeat(xib内)がありますが、これはサブクラス化されたUIViewです(Seat.hと.m私のプロジェクトのファイル)。ゲームボードが初期化されると、これらのシートも作成されます(xibのおかげで)。座席をNSMutableArrayにロードして後で使用できるようにしたい。何らかの理由で私はそれを働かせることができません。NSMutableArrayをUIViewオブジェクトでロードできません
私のGameViewControllerヘッダーファイルに、NSMutableArray * seat;を追加しました。 @class Seatをインクルードしました。インタフェース宣言の上に。
GameViewControllerの私のawakeFromNibメソッドでは、私は座席= [[NSMutableArray arrayWithCapacity:6] retain];そのため、ゲームボードが表示されたら配列を初期化する必要があります。
次に、私のSeatヘッダーファイルには、GameViewController * controllerが含まれています。 @class GameViewControllerをインターフェイス宣言の上にインクルードしました。また、GameViewControllerのプロパティを追加して合成しました。
シートのawakeFromNibメソッドには、[controller registerSeat:self]があります。
これはGameViewControllerの中で、[seatts addObject:seat];という行を1つしか持たないメソッドを呼び出します。これは配列にシートを追加するはずです。しかし何らかの理由でこのメソッドが呼び出されることはありません。もしそうなら、私は決して伝えることはできません。私がデバッグするとき、シートがボードに追加されても、フォーカスは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'メソッドで停止する必要があります。 –