2011-11-16 106 views
0

我正在使用此代碼顯示數據庫中的所有行,但是當tableview加載時只顯示最後一行顯示出來..我做錯了什麼。請幫忙!!如何顯示數據庫中的所有行在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

已經寫了這個循環的任何方法。粘貼委託方法的代碼以及更好的理解。 – iamsult

+0

嘿感謝您的回覆我已經寫在cellForRowAtIndexPathmethod –

+0

我已編輯和粘貼整個功能。謝謝 –

回答

0

你應該這樣做;

in .h file;

NSMutableArray *myFetchResults; 

in .m file;

-(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

NSMutableArray'可能不會響應'-objectAtindexPath:' –

+0

事件* ev =(Event *)[myFetchResults objectAtindexPath:indexPath。行];在這一行它給出了一個警告 NSMutableArray'可能不會響應'-objectAtindexPath:' –

+0

ohh sry這是我的錯,你應該使用-objectAtIndex方法。 – relower

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; 

這是很難得沒有看到更多代碼的更多細節,但這應該讓你在正確的道路上。

0

你只是覆蓋了cell.textLabel中的值。如果您for循環白布了它會是這個樣子:

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

你應該使用indexPath.row來選擇你想要的記錄中設置你的文字– tableView:cellForRowAtIndexPath:

0

您應該使用if(條件)。因爲,for()迭代直到最後一個記錄將被獲取並設置記錄的數據。

0

我想起初你的mutableFetchResultsviewdidload然後保留[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?

相關問題