15

これは私の問題です: 私はUITableView自分のストーリーボードにこれを小さくしています:ここに画像の説明を入力

そして、これは私のコードです:

SmallTableViewController.h

#import <UIKit/UIKit.h>
#import "SmallTable.h"

@interface SmallViewController : UIViewController

@property (weak, nonatomic) IBOutlet UITableView *myTable;

@end

SmallTableViewController.m

#import "SmallViewController.h"

@interface SmallViewController ()

@end

@implementation SmallViewController
@synthesize myTable = _myTable;

- (void)viewDidLoad
{
    SmallTable *myTableDelegate = [[SmallTable alloc] init];
    [super viewDidLoad];
    [self.myTable setDelegate:myTableDelegate];
    [self.myTable setDataSource:myTableDelegate];

    // Do any additional setup after loading the view, typically from a nib.
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

@end

ご覧のとおり、myTableDelegate というインスタンスを myTable の Delegate および DataSource として設定します。

これは SmallTable クラスのソースです。

SmallTable.h

#import <Foundation/Foundation.h>

@interface SmallTable : NSObject <UITableViewDelegate , UITableViewDataSource>

@end

SmallTable.m

@implementation SmallTable

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 0;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return 5;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // Configure the cell...
    cell.textLabel.text = @"Hello there!";

    return cell;
}

#pragma mark - Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"Row pressed!!");
}

@end

アプリに必要なすべてのUITableViewDelegateandメソッドを実装しました。UITableViewDataSourceビューが表示される前にクラッシュするのはなぜですか??

ありがとう!!

4

5 に答える 5

15

リクスター そうですね。ただし、メソッドの最後でオブジェクトの割り当てが解除されるstrongため、プロパティに修飾子を使用する必要があると思います。viewDidLoad

@property (strong,nonatomic) SmallTable *delegate;

// inside viewDidload

[super viewDidLoad];
self.delegate = [[SmallTable alloc] init];    
[self.myTable setDelegate:myTableDelegate];
[self.myTable setDataSource:myTableDelegate];

しかし、テーブルに別のオブジェクト (データ ソースとデリゲート) を使用する理由はありますか? SmallViewControllerテーブルのソースとデリゲートの両方として設定してみませんか?

さらに、正しい方法でセルを作成していません。これらの行は何もしません:

static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

// Configure the cell...
cell.textLabel.text = @"Hello there!";

dequeueReusableCellWithIdentifierテーブルの「キャッシュ」から、既に作成されていて再利用できるセルを取得するだけです(これはメモリの消費を避けるためです)が、作成していません。

どこにいるのalloc-init?代わりにこれを行います:

static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(!cell) {
    cell = // alloc-init here
}
// Configure the cell...
cell.textLabel.text = @"Hello there!";

さらにnumberOfSectionsInTableView、0 ではなく 1 を返すように指示します。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}
于 2012-06-29T16:28:22.097 に答える
4

おそらくARCを使用していますか?あなたmyTableDelegateはローカル変数でのみ参照されますviewDidLoad-そのメソッドが終了すると、割り当てが解除されます。(デリゲート/データソース パターンでは、オブジェクトはデリゲートを所有していないため、オブジェクトへのテーブル ビューの参照は弱いです。) それだけでクラッシュが発生するとは思いませんが、問題の鍵となる可能性があります。

于 2012-06-29T16:01:53.243 に答える
1

setDelegateデリゲートを保持しません。

numberOfSectionsInTableViewメソッドは 0 ではなく 1 を返す必要があります。

于 2012-06-29T16:22:55.027 に答える
1
(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 0;
}

セクション数は少なくとも 1 つ設定する必要があります

于 2013-11-30T09:59:03.837 に答える
0

UITableView オブジェクトのデリゲートは、UITableViewDelegate プロトコルを採用する必要があります。プロトコルのオプションのメソッドを使用すると、デリゲートは選択を管理したり、セクションの見出しとフッターを構成したり、メソッドを削除したりできます。

ここに画像の説明を入力 </p>

于 2013-06-19T13:22:40.337 に答える