我使用此代码显示数据库中的所有行,但是当tableview加载时,只显示最后一行..我做错了什么。请帮忙!!
- (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;
}
答案 0 :(得分:0)
此代码重复地为同一个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;
如果没有看到更多代码,很难提供更多细节,但这应该让你走上正确的道路。
答案 1 :(得分:0)
你应该这样做;
<。>在.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]];
}
我认为这会奏效。
答案 2 :(得分:0)
您只是覆盖了cell.textLabel
中的值。如果您的for
循环展开,它将看起来像这样:
cell.textLabel = row1Text
cell.textLabel = row2Text
...
cell.textLabel = rowNText
您应该使用– tableView:cellForRowAtIndexPath:
在indexPath.row
中设置单元格文字,以选择所需的记录。
答案 3 :(得分:0)
你应该使用if(Condition)。因为,for()迭代直到最后一条记录将被获取并设置记录的数据。
答案 4 :(得分:0)
我认为首先在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;
}
如果你不理解任何代码然后告诉我......因为我遇到同样的问题...如果你想看到更多看到我的解决方案.... What will be the numberOfRowsInSection return type for uitableview when XML data is retrieved?