ARCが有効でストーリーボードを備えたXcode 4.4.1を使用しています(これが違いを生む場合に備えて)
テーブルビューを含むUITableViewControllerがあります(テーブルビューは「サブタイトル」セルを使用します)
テーブルを埋めるために NSArray を使用しています:
@property (strong, nonatomic) NSArray *myData;
viewDidLoad でこのテーブルのデータを取得します
- (void)viewDidLoad
{
[super viewDidLoad];
self.myData = [self.myCalendarModel GetWeightHistory] ;
}
それから私は持っています:numberOfSectionsInTableViewとnumberOfRowsInSection
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [self.myData count];
}
そして最後に私の cellForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"WeighDataCell";
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
WeightHistory *myDataForCell = [self.myData objectAtIndex:indexPath.row];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd.MM.YYYY"];
NSString *dateString = [dateFormat stringFromDate:myDataForCell.weightDate];
cell.textLabel.text = dateString;
cell.detailTextLabel.text = [myDataForCell.weight description];
return cell;
}
問題なくテーブルを表示できます。6 つのセルを表示するスペースがあり、NSArray には 6 つのレコードがあります。テーブルを下にスクロールしても問題ありません。
上にスクロールすると、セルがビューから外れていなければ問題ありません。指を離したときに 1 つのセルが表示されなくなるとすぐに、Exc_bad_access エラーが発生します。
NSZombieEnable でデバッグすると、次のように表示されます。
[CalendarHistoryTableViewController tableView:cellForRowAtIndexPath:]: message sent to deallocated instance 0x6eaf6f0
それで、私の細胞が解放されると思います。それが、この問題が発生する理由です。しかし、いつ、どのようにしてこの状況を防ぐことができるかわかりません。
あなたが提供できる助けをありがとう!エリック
@FaddishWormはい、識別子が設定されており、セルが nil でない場合は、割り当てられていることを意味します。しかし、データを画面に表示できるため、この部分は機能しているようです。
@Pandey_Laxmanコメントありがとうございます。これが、このクラス内にある唯一のコードです。問題が WeightHistory オブジェクトに関連していないことを確認するには、コードからこの部分を削除しましたが、それでも同じエラーが発生します
これは私の新しい cellForRowAtIndexPath がどのように見えるかです:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"WeighDataCell";
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.textLabel.text = @"test";
cell.detailTextLabel.text = @"test2";
return cell;
}