0

Xcode 4.3 と SDK 5.1 で単純な UITableView を作成しようとしています。古い SDK では、次のエラーを受け取っていないので、Profiler と NSZombie をチェックしても何が起こっているのか少し混乱しています。

私の.hファイルで

NSMutableArray *fruits;

私の.mファイルで

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

    fruits = [[NSMutableArray alloc] init];

    [fruits addObject:@"Apples"];
    [fruits addObject:@"Bananas"];
    [fruits addObject:@"Oranges"];
    [fruits addObject:@"Kiwi Fruit"];
}

- (void)dealloc
{
    [fruits release];
    [super dealloc];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"%d", [fruits count]);
    return [fruits count];
}

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if(cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    NSString *title = [fruits objectAtIndex:indexPath.row];
    cell.textLabel.text = title;
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *selectedOption = [fruits objectAtIndex:indexPath.row];
    NSLog(@"%@", selectedOption);
}

果物を選択するたびに EXC_BAD_ERROR が発生し、出力に「tableView:didSelectRowAtIndexPath:]: 割り当て解除されたインスタンスに送信されたメッセージ」と表示されます

ARC を簡単に見て、これはメモリ管理の問題である可能性があると考えたので、dealloc を削除しましたが、それでも例外がスローされます。この単純な例には何が欠けていますか?!

4

1 に答える 1

0

コードは完璧に見えます。あなたがそれを言ったとしても、あなたが自動リリースなどを持っているので、ARCは無効になっていると思います。私がチェックすることの1つは、UITableViewを委任して、xibのViewControllerに適切に設定されているかどうかを確認することです。

于 2012-07-25T00:36:40.073 に答える