0

別の (Table)ViewController から Scrollview に TableView を実装しようとしています。私は文字通り何時間も試していますが、問題を理解できません。私が得るエラーは次のとおりです。

-[UISectionRowData numberOfSectionsInTableView:]: インスタンス 0x687fdb0 に送信された認識されないセレクター 2012-05-07 16:47:18.966 Test2[12212:f803] *キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了します。理由: '-[UISectionRowData numberOfSectionsInTableView:]:インスタンス 0x687fdb0 に送信された認識されないセレクター

これは、私が使用しているコード セグメントです (viewDidLoad() メソッドで実装):

DateSubviewController *dateSubviewController = [[DateSubviewController alloc] init];
//This is the tableViewController which handles the code from the tableView I want to implement. 

NSArray *views = [NSArray arrayWithObjects: [dateSubviewController view], nil];

self.scrollView.delegate = self;
self.pageControlBeingUsed = YES;

for (int i = 0; i < views.count; i++) {
    CGRect frame;
    frame.origin.x = self.scrollView.frame.size.width * i;
    frame.origin.y = 0;
    frame.size = self.scrollView.frame.size;

    UITableView *subview = [views objectAtIndex:i];
    [self.scrollView addSubview:subview];

    subview = nil;
}

self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * views.count, self.scrollView.frame.size.height);

スクロールビューはそれ自体で動作しています (異なる色のフレームでテストしました)。

問題は、[dateSubviewController ビュー] が tableView が機能するために必要なメソッドを呼び出さないことです。ビューアウトレットはtableView に接続されていますが、ストーリーボードでは「グレー表示」されています。間違ったビューを指している可能性があると思ったので、すでにtableViewを削除して再度接続しようとしました。これは効果がありませんでした。クラッシュは、viewDidLoad() メソッド全体が完了した直後に発生します。

使おうとすると

NSArray *views = [NSArray arrayWithObjects: [dateSubviewController dateTable], nil];

(dateTable は私が実装しようとしている tableView です) tableView に直接アクセスするには、配列ビューにはデバッグで 0 要素が含まれます。TableView デリゲート メソッドも呼び出されません。しかし、それはクラッシュしません。

もうどうしたらいいのかわからない。私は現在、この問題に約 6 時間取り組んでおり、数回デバッグし、インターネットで調査しましたが、何も見つかりませんでした。御時間ありがとうございます!

4

2 に答える 2

3

何時間もの作業の後、これは autoreleasepool の問題であることがわかりました。viewControllerを初期化すると...

DateSubviewController *dateSubviewController = [[DateSubviewController alloc] init];

...これはローカル変数であり、 viewDidLoad()メソッドが終了するとすぐに解放されました。インスタンス変数として使用する必要がありました。これにより、将来の読者のためにもエラーが修正されることを願っています!

ViewController を初期化するクラスのヘッダーファイル:

@property (strong, nonatomic) DateSubviewController * dateSubviewController;

次に、次の方法で初期化します。

    self.dateSubviewController = [[DateSubviewController alloc] init];
于 2012-05-08T12:33:02.240 に答える
0

エラーによると、tableView の dataSource が tableView が必要とするメソッドに応答しないことは明らかです。このデータ ソース (tableView:numberOfRowsInSection: を実装するオブジェクト) である必要があるオブジェクトが既にあると思うので、tableView の dataSource プロパティをこのオブジェクトではなく、別のオブジェクトに設定した可能性があります。コードまたは Xibs を確認し、tableView の dataSource リンクを修正してください。

最初にこれを行います。

その後、他の問題が発生する可能性があります。わかるでしょ。ただし、まずこれを修正し、エラーを読んで理解することを学びます。「インスタンス」、「セレクター」、「例外」など、理解できない単語について自分自身を文書化します。エラーを理解することは、デバッグを成功させるための鍵です。

于 2012-05-08T08:21:53.153 に答える