テーブルビューを持つナビゲーション コントローラーを前後に移動するとクラッシュします。計測器を使用して何が起こっているかを確認しましたが、最初のビュー コントローラーに戻ると
[_NSCoreManagedObjectID allocateBatch:Count:]
リークが発生することがわかりました。これは Instruments
のスクリーンショットです。行き来すればするほど、より多くのリークが発生します。この理由は何でしょうか?viewdidunload で nsfetchedresultcontroller を nil に設定しましたが、タブ間を移動するときに nil に設定しません。
ありがとう!更新:いくつかのテストを行ったところ、コメントすると
Person *person = [self.fetchedResultsController objectAtIndexPath:indexPath];
の
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"personCell";
PeopleListTableViewCell *cell = (PeopleListTableViewCell *) [tableView
dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[PeopleListTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure the cell...
Person *person = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.personName.text = person.fullname;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MM-dd-yyyy"];
NSDate *tmpDate = person.dateofbirth;
NSString *strDate = [dateFormatter stringFromDate:tmpDate];
cell.personDateOfBirth.text = strDate;
NSString *imgURL=[person.imageurl stringByAppendingString:@"?maxheight=120&maxwidth=156"];
[cell.personImage setImageWithURL:[NSURL URLWithString:imgURL] placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
return cell;
}
漏れがなくなります。この tableviewcontroller を別の uivewcontroller の tableview へのデリゲートとして使用しています。
これは、ボタンをクリックしてこのテーブルを表示するときに設定する方法です
- (void)signPeople
{
self.signInfoView.hidden = YES;
self.pplTableView.hidden = NO;
self.hud = [[ATMHud alloc]initWithDelegate:self];
[self.hud setActivity:YES];
self.hud.shadowEnabled = YES;
[self.view addSubview:self.hud.view];
[self.hud show];
if(!self.pplListTableViewController){
self.pplListTableViewController = [[PeopleListTableViewController alloc]init];
}
self.pplListTableViewController.delegate = self;
self.pplTableView.delegate = self.pplListTableViewController;
self.pplTableView.dataSource = self.pplListTableViewController;
//shows the People List
[self.pplListTableViewController setupFetchResultsController];
[self.pplTableView reloadData];
[self.pplTableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES]; //scroll to top
}
私はあちこちでテーブルビューを無効にしようとしましたが、ラベルと人物クラスの割り当てを解除しようとしましたが、何も役に立ちませんでした。人々のクラスが解放されるのを妨げているのは何でしょう。ありがとう!