当我向下滚动表格时,应用程序崩溃。而且我找不到代码中的错误在哪里。

这是我的代码:

NSMutableDictionary *tableDataDictionary;
NSInteger *rows_in_section;


-(void) initView
{
    if (!tableDataDictionary)
    {
        tableDataDictionary = [ [NSMutableDictionary alloc] init];
    }
    [self reloadTableData];
}

-(void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
    [mainTableView deselectRowAtIndexPath: [mainTableView indexPathForSelectedRow] animated:NO];

    [tableDataDictionary release];
    tableDataDictionary = nil;
    free(rows_in_section);
}

-(void) reloadTableData {
    [tableDataDictionary removeAllObjects];


    //Sections
    if (rows_in_section)
    {
        free(rows_in_section);
    }

    rows_in_section = (NSInteger*)calloc(25, sizeof(NSInteger));
    for (int i = 0; i <= 25; i++)
    {
        rows_in_section[i] = 0;
    }

    NSMutableArray *words_in_section = [ [NSMutableArray alloc] init];

    int cur_section = -1;

    while ( TRUE )
    {
        WordObject *tempWordObj = [ [WordsDatabase sharedWordsDatabase] getNextWordABC];
        if (!tempWordObj)
        {
            [tableDataDictionary setObject:words_in_section forKey:[NSNumber numberWithInt: cur_section] ];
            [tempWordObj release];

            [tableDataDictionary setObject:[words_in_section copy] forKey:[NSNumber numberWithInt: cur_section] ];
            [words_in_section removeAllObjects];

            break;
        }

        //First loop
        if (cur_section == -1) cur_section = toupper([ [tempWordObj word] characterAtIndex:0 ] ) - 'A';

        //If a has letter changed, assign the previous array to a dictionary
        if ( (toupper([ [tempWordObj word] characterAtIndex:0 ] ) - 'A') != cur_section )
        {
            [tableDataDictionary setObject:[words_in_section copy] forKey:[NSNumber numberWithInt: cur_section] ];
            [words_in_section removeAllObjects];
        }

        cur_section = toupper([ [tempWordObj word] characterAtIndex:0 ] ) - 'A';

        [words_in_section addObject:tempWordObj];

        [tempWordObj release];
        tempWordObj = nil;

        rows_in_section[cur_section]++;

    }

    [words_in_section release];

    [ [WordsDatabase sharedWordsDatabase] endGettingWordsABC];


    [mainTableView reloadData];
    [mainTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:NO];

}


//
// Table handling
//

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

// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return rows_in_section[section];
}

// Adding a section index here
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
    return ALPHA_ARRAY;
}

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
    return index;
}


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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }


    WordObject *tempWordObj = [ [tableDataDictionary objectForKey: [NSNumber numberWithInt:[indexPath section] ] ] objectAtIndex: [indexPath row] ];

    if (!tempWordObj)
    {
        DebugLog(@"!tempWordObj");
        return cell;
    }

    cell.text = [tempWordObj word];

    [tempWordObj release];

    return cell;
}


我如何通过向下滚动来解决此问题以及为什么会发生呢?
并且,如果您在我的代码中发现任何其他缺点,请告诉我。

先感谢您,
伊利亚

最佳答案

您不需要此行;

[tempWordObj release];


[NSDictionary objectForKey]返回一个自动释放的对象,即该对象将在函数返回后的某个时间自动释放。

关于iphone - 向下滚动时,UITableView应用程序崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/717775/

10-08 20:56