0

私は、データをUITableViewsで表示し、カスタムUITTableViewCellをa内に表示するインターフェイスを実装しようとしています(わかりやすくScrollViewするためににリンクされています)。Page Control

これらの機能を互いに分離して実装する方法を示したチュートリアルをいくつか見つけましたが、一緒に実装することはできませんでした。また、いくつかのカスタムUITableViewをコントローラーにロードする方法については何も見つかりませんでした。UIViewController私の基本的なアプローチは、 's内でこれに帰着しviewDidLoadます:

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

    SceduleTableView *sceduleTable = [[SceduleTableView alloc] initWithFrame:frame];

    [sceduleTable setDelegate:sceduleTable];
    [sceduleTable setDataSource:sceduleTable];
    [self.scrollView addSubview:sceduleTable];
}

私は4ページでテストしてきましたが、これを解決できれば、これらは動的な量になります。

SceduleTableViewUITableViewは、ローカルsqliteデータベースからオブジェクトを含む配列を取得するデータソースを継承し、持っています。すべてのSceduleTableViewがそれぞれのデータをロードする部分が機能していますが、現時点ではビルドが失敗し、次のエラーが返されます。

2012-08-13 15:43:18.975 basis[2055:f803] -[SceduleTableView tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x8bc4800
2012-08-13 15:43:18.976 basis[2055:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SceduleTableView tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x8bc4800'

その関数は実際にはあまり機能しませんが、NSLogでさえ到達することはありません。

- (NSInteger)numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"Should have %d rows", sceduleItems.count);
    return sceduleItems.count;
}

そして、テーブルに入力しようとしている配列が空ではなく、SceduleTableViewインスタンスがnilではないことを知っています(これが問題であった可能性があることを読みました)。これらのログは、SceduleTableViewごとにこれを返します

NSLog(@"Array sceduleItems contains %d", sceduleItems.count);
NSLog(@"Trying to reload. Self = %@", self);
[self reloadData];

2012-08-13 15:49:32.183 basis[2259:f803] Array sceduleItems contains 340
2012-08-13 15:49:32.184 basis[2259:f803] Trying to reload. Self = <SceduleTableView: 0xbabb800; baseClass = UITableView; frame = (960 0; 320 440); clipsToBounds = YES; layer = <CALayer: 0x6e29660>; contentOffset: {0, 0}>

私はiOS開発に非常に慣れていないので、正直なところ、自分のアプローチでさえ正しいかどうかはわかりません。フィードバックは大歓迎です!

4

1 に答える 1

1

システムはメソッドを呼び出そうとしますtableView:numberOfRowsInSection:。あなたはそれを定義していません。メソッドを定義し、numberOfRowsInSection:UITableViewのデフォルトの実装を上書きしました。お願い、それはやめて。

定義する必要があります

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"Should have %d rows", sceduleItems.count);
    return sceduleItems.count;
}

データソース内。

また、多くの開発者は、テーブルビューオブジェクトを独自のデリゲートおよびデータソースとして使用することに眉をひそめるでしょう。おそらく、より一般的な代替設計のModel-View-Controllerパラダイムに慣れたいと思うでしょう。

于 2012-08-13T17:19:33.150 に答える