当我向下滚动表格时,应用程序会崩溃。我无法找到代码中的错误。
这是我的代码:
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;
}
如何通过向下滚动来解决这个问题以及为什么会出现这个问题? 如果您在我的代码中发现任何其他缺点,请告诉我。
提前谢谢你, 伊利亚安德。
答案 0 :(得分:4)
你不需要这一行;
[tempWordObj release];
[NSDictionary objectForKey]返回一个自动释放的对象,该对象将在函数返回后的某个时间自动释放。