ビューコントローラがスタックからポップされたときにメモリ用に解放されない理由のトラブルシューティングに多くの時間を費やしました。これが私が取り組んでいるもののクリフノートバージョンです:
- (IBAction)submitTurn:(UIButton *)sender {
...
[imageFile saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error){
if (!error){
...
[game saveEventually];
...
[push sendPushInBackground];
}
}
else{
NSLog(@"Error submitting turn: %@ %@", error, [error userInfo]);
[[[UIAlertView alloc] initWithTitle:@"Error Saving Game" message:@"Try again later." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil] show];
}
} progressBlock:nil];
[self.navigationController popToRootViewControllerAnimated:YES];
}
アプリを実行してこのViewControllerに戻り、順番を送信し続けると、instruments/leaksはこのViewControllerの複数のライブインスタンスがあることを示しています。ただし、すべての画像/ゲーム/プッシュ保存をコメントアウトしてビューをポップすると、メモリが解放され、複数のライブインスタンスが存在することはありません。
また、poppingToRootの前にすべてが保存され、終了したことを確認するためにこれを試しました。
- (IBAction)submitTurn:(UIButton *)sender {
...
[imageFile saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error){
if (!error){
...
[game saveEventually:^(BOOL succeeded, NSError *error) {
...
[push sendPushInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
[self.navigationController popToRootViewControllerAnimated:YES];
}];
}
}];
}
else{
...
}
} progressBlock:nil];
}
それでも、サイコロはありません。アーティファクトを残さずにルートに戻るにはどうすればよいですか?