Только 10 CustomViewCells исходят право - PullRequest
0 голосов
/ 01 января 2012

Есть странная проблема с некоторыми вещами, которые я использую. Пользовательский tableViewCell или дБ. В моем приложении я сделал подкласс UITableViewCell. Мои подпредставления не прозрачны, поэтому не должно быть проблем с прокруткой или влиянием на производительность. Они выглядят хорошо, и единственная проблема в том, что я вижу только 10 первых ячеек, которые после того, как я получаю одинаковые имена метки NAME и повторяю другие, пока выбираю правильные идентификаторы из базы данных. Похоже,

CAT ID = 12 >> DOG ID = 18

А на месте КПП должна быть СОБАКА. Нажав на ячейку CAT, я получаю DOG title. Таким образом, он говорит, что ярлык viewCell является лже.

Я пытался запустить те же самые выборки БД в 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 Ответ

1 голос
/ 02 января 2012

Переместить следующий код

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

за пределами блока if (cell == nil), так как он должен устанавливаться всякий раз, когда устанавливается ячейка, независимо от того, является ли она новой или повторно использованной. В вашем случае вы настраиваете данные только для вновь созданных ячеек - повторно использованные ячейки просто выводятся UITableView и отображаются с первоначально настроенными данными.

Подробнее о том, как работает повторное использование ячейки UITableView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...