只有10个CustomViewCell正在发起

时间:2012-01-01 19:52:15

标签: ios cocoa-touch sqlite

我正在使用的一些事情存在一个奇怪的问题。自定义tableViewCell或db。在我的应用程序中,我创建了UITableViewCell的子类。我的子视图不透明,因此不应存在滚动问题或对生产力的影响。它们看起来很好,唯一的问题是我只能看到10个第一个单元格,在我获得NAME标签的相同名称和其他重复之后,同时从数据库中获取正确的ID。它看起来像

CAT id = 12>> DOG id = 18

在CAT的位置应该是DOG。单击CAT单元格,我将获得DOG标题。所以它说,viewCell的标签是lier。

我尝试在SQLiteStudio中运行相同的数据库选择并且它们没问题。我正在获得全套记录。有人面临同样的问题,邪恶在哪里?

DBAccess方法:

-(NSMutableArray*)getNominals:(int)subCountryID
{
NSMutableArray *nominals=[[[NSMutableArray alloc]init]autorelease];
const char* sqlNominals=sqlite3_mprintf("SELECT noms.nominalID, noms.nominal,noms.nominalName,noms.nominalImg,noms.priority\
FROM nominals AS noms\
INNER JOIN NominalsAndSubCountriesRelation as rel\
ON noms.nominalID=rel.NominalID\
WHERE rel.SubcountruID=%i\
ORDER BY noms.priority",subCountryID);

sqlite3_stmt *statement;
int sqlResult = sqlite3_prepare_v2(database, sqlNominals, -1, &statement, NULL);

if ( sqlResult== SQLITE_OK)
{
    while (sqlite3_step(statement) == SQLITE_ROW)
    {
        Nominal *nom=[[Nominal alloc]init];
        nom.nominalID=sqlite3_column_int(statement, 0);
        char *nominal=(char *)sqlite3_column_text(statement, 1);
        char *nominalName=(char*)sqlite3_column_text(statement, 2);
        char *nominalImg=(char*)sqlite3_column_text(statement, 3);
        nom.nominal=(nominal)?[NSString stringWithUTF8String:nominal]: @"";
        nom.nominalName=(nominalName)?[NSString stringWithUTF8String:nominalName]: @"";
        nom.nominalImg=(nominalImg)?[NSString stringWithUTF8String:nominalImg]: @"";
        [nominals addObject:nom];
        [nom release];
    }
    sqlite3_finalize(statement);
}
else
{
    [self dbConnectionError];
}
return nominals;
}


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

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
NominalsCustomCell *cell =(NominalsCustomCell*)[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) 
{
    cell = [[[NominalsCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;
    Nominal *nominalsObj=[self.nominalsArr objectAtIndex:[indexPath row]];
    [cell setTheNominals:nominalsObj];
}
return cell;
}

提前谢谢。

1 个答案:

答案 0 :(得分:1)

移动以下代码

Nominal *nominalsObj=[self.nominalsArr objectAtIndex:[indexPath row]];
[cell setTheNominals:nominalsObj];

if (cell == nil)块之外,因为它应该在设置单元时设置,无论是新的还是重用的。在您的情况下,您只为新创建的单元格设置数据 - 重复使用的单元格由UITableView简单显示,并与原始设置数据一起显示。

阅读有关UITableView单元重用方式的更多信息。