最近、この動作が 2 回発生しましたが、問題の根本的な原因が何であるか疑問に思っていました (つまり、これが発生しないようにするにはどうすればよいので、修正に多くの時間を無駄にする必要はありません)。
再利用する予定のテーブルビュー セル内に何かを割り当てると、別のセルが読み込まれてテーブルがリロードされると、そのオブジェクトが割り当て解除されることがあります。
例:
SubHolder *dataStorage;
- (void) initializeLicenseTable
{
LicenseCell *sampleLicense = [LicenseCell new];
self.licenseData = [[NSMutableArray alloc] initWithObjects:sampleLicense, nil];
nib = [UINib nibWithNibName:@"LicenseCell" bundle:nil];
if (dataStorage == nil)
{
dataStorage = [SubHolder new];
dataStorage.owner = self;
[dataStorage addStorageLocation];
}
} //cellForRowAtIndexPath and stuff
このコードは、if ステートメントがないと機能しません (dataStorage がゾンビになります)。
この動作の原因は何ですか? dataStorage が nil かどうかをテストしてから、それを割り当てることは、ゾンビの問題を修正することとは正反対のようです。
-編集-
この動作が変数の共有によって引き起こされる場合、このオブジェクトのインスタンスが作成されるたびに独自のデータ ストレージ オブジェクトが作成されるようにするにはどうすればよいでしょうか? 各テーブルには独自の情報があり、他のテーブルとは共有されません。