たとえば、最初のオブジェクトが次のような場合、datasoure には 5 つのオブジェクトがあります。
Obj -> id:1,name:"A"
オブジェクトの名前を「B」に変更すると;
Obj -> id:1,name:"B"
それから[tableView reloadData]
最初のセルにはまだ「A」が表示されていますが、 「B」に変更したいと思います。
たとえば、最初のオブジェクトが次のような場合、datasoure には 5 つのオブジェクトがあります。
Obj -> id:1,name:"A"
オブジェクトの名前を「B」に変更すると;
Obj -> id:1,name:"B"
それから[tableView reloadData]
最初のセルにはまだ「A」が表示されていますが、 「B」に変更したいと思います。
cellForRowAtIndexpath メソッドでは、datasource 配列から値を取得して表示するので、datasource メソッドを適切に管理します。
問題は、再利用性がコードに問題を引き起こしていることだとは思いません
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell;
static NSString *cellIdentifier1 = @"surveyCell";
if (tableView== self.surveytableView) {
cell= [tableView dequeueReusableCellWithIdentifier:cellIdentifier1];
if(cell==nil)
{
//alloc the cell
//DO NOT SET THE VALUE HERE
}
//here set the value
return cell;
}
ここにコードがあります、私がしたことは、
// クラス DataClass
@interface DataClass : NSObject
{
@public;
NSString *str;
}
@implementation DataClass
- (id)init
{
[super init];
str = nil;
return self;
}
@end
//viewController.h
@interface ViewController : UIViewController<UITableViewDataSource ,UITableViewDelegate>
{
IBOutlet UITableView *aTableView;
IBOutlet UIButton *aButton;
}
- (IBAction)whenButtonClicked:(id)sender;
@end
//in .m file
#import "ViewController.h"
#import "DataClass.h"
@interface ViewController ()
{
NSMutableArray *DataSource;
}
@end
// ViewController.m
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
aTableView.dataSource = self;
aTableView.delegate = self;
DataSource = [[NSMutableArray alloc]init];
for(int i=0 ; i<5 ; i++)
{
DataClass *data = [[DataClass alloc]init];
data->str=@"hello";
[DataSource addObject:data];
[data release];
}
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *aCell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if(aCell == nil)
{
aCell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"]autorelease];
}
DataClass *aValue = [DataSource objectAtIndex:indexPath.row];
aCell.textLabel.text = aValue->str;
return aCell;
}
- (IBAction)whenButtonClicked:(id)sender
{
DataClass *aObj = [DataSource objectAtIndex:2];//changing the 3'rd object value as yours in 5th object
aObj->str = @"world";
[aTableView reloadData];
}
@end
//after "changeValue" button pressed the third row displays "world"