1

行が 1 より大きい場合にクラッシュする uitableview があります。配列内の 2 つのオブジェクトであるため、まったく意味がありません。オブジェクト 1 では完全に機能しますが、2 では機能しません。見てみな:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSLog(@"rigth not %i", [pro.matches count]);

    return 1;
}

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    //NSLog(@"%i", indexPath.row);
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    // configure your cell here...
    if ([pro.matches count] >0) {
        cell.textLabel.text = [pro.matches objectAtIndex:1];
    }
    [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
    return cell;
}

エラー: [self.tableview reload data] を呼び出すと、スレッド 1 sigabort がオンになります。

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
*** First throw call stack:
(0x13dc022 0x156dcd6 0x13c8644 0x44cea5 0x2591a8 0x204688 0x206862 0xb466d 0xb4167 0x2a42 0x9a5f 0xa2755e 0x96463e 0x95d1e7 0x95ceea 0x9ed0ad 0x3da2330 0x3da4509 0x1313803 0x1312d84 0x1312c9b 0x12c57d8 0x12c588a 0x26626 0x20ed 0x2055)
terminate called throwing an exception
4

7 に答える 7

2

アプリがクラッシュする理由はtableView:numberOfRowsInSection

あなたは1つだけ返します。あなたは返さなければなりません[pro.matches count]

于 2012-05-02T15:13:36.213 に答える
1

配列内の文字列が正しく作成および初期化されているかどうかを確認しましたか?チェックする必要のある場所がいくつかあると思います。

  1. 配列が適切であり、参照するときに配列も配列内のオブジェクトも割り当て解除されていないことを確認してください。

  2. -numberOfRowsInSectionでは、[pro.matchescount]を返す必要があります

  3. -cellForRowAtIndexPathでは、cell.textLabel.text = [pro.matches objectAtIndex:indexPath.row];である必要があります。

私はデモプログラムを書きました、それを試してみてください、あなたはそれを手に入れるでしょう。viewController.hに単一のビューアプリを作成しました。

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>
{
    NSArray *list;
}

@property(nonatomic,retain) NSArray *list;
@end

そしてviewController.mでは、

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize list;

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    NSArray *tempArray = [[NSArray alloc] initWithObjects:@"a",@"b", nil];
    self.list = tempArray;
    [tempArray release];
}

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

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

/********************************************************************************
 ******************** UITableViewDataSource Protocol Methods ********************
 ********************************************************************************/

#pragma mark - UITableViewDataSource Protocol Functions

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    //NSLog(@"%i", indexPath.row);
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    // configure your cell here...
    if ([list count] >0)
    {
        cell.textLabel.text = [list objectAtIndex:indexPath.row];
    }

    [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
    return cell;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return list.count;
}

/********************************************************************************
 ******************** UITableViewDelegate Protocol Methods **********************
 ********************************************************************************/

#pragma mark - UITableViewDelegate Protocol Functions

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{}
@end
于 2012-05-02T15:32:11.523 に答える
1

使用する return [pro.matches count]

行数メソッドで1を返す代わりに

于 2012-05-02T15:13:26.797 に答える
1

ここで配列サイズを返します。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [pro.matches count];
}

ステートメントを削除して、次のifものに置き換えます。

cell.textLabel.text = [pro.matches objectAtIndex:indexPath.row];

indexPath.rowゼロから始まる現在の行インデックスです。

于 2012-05-02T15:18:12.677 に答える
0

これを理解したことがありますか?私は同じ問題を抱えていましたが、ここに投稿されたソリューションで解決することになりました: https://stackoverflow.com/a/8096988/810360

つまり、テーブルを静的から動的に設定しただけです。

UITableView のプロパティ

于 2012-10-27T20:50:09.830 に答える
0
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSLog(@"rigth not %i", [pro.matches count]);

    return  [pro.matches count];
}

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    //NSLog(@"%i", indexPath.row);
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    // configure your cell here...
    if ([pro.matches count] >0) {
        cell.textLabel.text = [pro.matches objectAtIndex:indexpath.row];
    }
    [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
    return cell;
}

それでもクラッシュする場合は、すべてのコードをここに投稿してください。

于 2012-05-02T16:45:17.560 に答える