1

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;
}
4

1 に答える 1

2

私はそれを考え出した。

TableViewControllerは別のセグエによって画面に表示されていましたが、現在のポインターを「強力なプロパティ」にViewController保存していませんでした。TableViewController

cellForRowAtIndexPathそのため、iOSが私を呼び出そうとしたとき、TableViewController既にリリースされていたため、呼び出すことができませんでした。

助けてくれてありがとう。

よろしく、 エリック

于 2012-08-22T19:53:21.923 に答える