Как я могу отобразить все строки из базы данных в виде таблицы - PullRequest
0 голосов
/ 16 ноября 2011

Я использую этот код для отображения всех строк из базы данных, но при загрузке таблицы отображается только последняя строка ... что я делаю не так. Пожалуйста, помогите !!

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

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

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:managedObjectContext];

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];

NSError *error;
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];

if (!mutableFetchResults)
{
    NSLog(@"Cant Fetch");
}

//compare fetched data with user input abd login if match
for(Event *ev in mutableFetchResults)
{
    NSString *cellValue=[ev VidField];
    NSString *cellValue1=[ev ImgField];
    NSLog(@"%@",cellValue);
    NSLog(@"%@",cellValue1);
    [cell.textLabel setText:cellValue];
    cell.image = [UIImage imageNamed:cellValue1];
}
return cell;

}

Ответы [ 5 ]

0 голосов
/ 16 ноября 2011

я думаю, сначала возьмите mutableFetchResults в viewdidload, а затем сохраните [mutableFetchResults retain].

тогда число строк таблицы будет [mutableFetchResults count]

тогда сделайте этот код ...

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

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


}
NSString *cellValue=[indexpath.row VidField];
NSString *cellValue1=[indexpath.row ImgField];
NSLog(@"%@",cellValue);
NSLog(@"%@",cellValue1);
[cell.textLabel setText:cellValue];
cell.image = [UIImage imageNamed:cellValue1];
return cell;
}

если какой-либо код, который вы не понимаете, скажите мне ... потому что я столкнулся с той же проблемой ... если вы хотите увидеть больше, посмотрите мое решение .... Каким будет тип возвращаемого числа numberOfRowsInSection для uitableview когда извлекаются данные XML?

0 голосов
/ 16 ноября 2011

Вы должны использовать if (Condition) для этого.Потому что, for () итерация до последней записи будет получать и устанавливать данные записи.

0 голосов
/ 16 ноября 2011

вы должны сделать так;

в .h файле;

NSMutableArray *myFetchResults;

в .m файле;

-(void)getAllDataFromDatabase{ // call it to get data
   myFetchResults = [[NSMutableArray alloc] init];
   //database connection codes
   myFetchResults = mutableFetchResults; // now you have an array with all objects.
}

in UITableView cellForRowAtIndexPath delegate method:
{
  Event *ev = (Event*)[myFetchResults objectAtindex:indexPath.row];
  cell.textLabel.Text = [ev VidField];
  cell.image = [UIImage imageNamed:[ev ImgField]];
}

Я думаю, что это сработает.

0 голосов
/ 16 ноября 2011

Вы просто перезаписываете значение в cell.textLabel. Если бы ваш for цикл был развернут, он бы выглядел примерно так:

cell.textLabel = row1Text
cell.textLabel = row2Text
...
cell.textLabel = rowNText 

Вы должны установить текст ячейки в – tableView:cellForRowAtIndexPath:, используя indexPath.row, чтобы выбрать, какую запись вы хотите.

0 голосов
/ 16 ноября 2011

Этот код многократно устанавливает разные значения для одного и того же экземпляра cell, поэтому в конечном итоге он устанавливается равным последнему событию в результатах выборки. Ваш метод cellForRowAtIndexPath должен использовать indexPath.row для установки значений для ячейки из определенного события в этой точке вашего mutableFetchResults - если это массив, это будет что-то вроде:

Event *ev = [mutableFetchResults objectAtIndex:indexPath.row];
NSString *cellValue=[ev VidField];         
NSString *cellValue1=[ev ImgField];         
NSLog(@"%@",cellValue);         
NSLog(@"%@",cellValue1);         
[cell.textLabel setText:cellValue];         
cell.image = [UIImage imageNamed:cellValue1];
return cell;

Трудно дать какие-либо подробности, не видя больше кода, но это должно привести вас на правильный путь.

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