У меня есть вид таблицы, где каждая ячейка может играть сообщение, аналогичного показанному голосовой почты таблицы из Iphone с той разницей, что ползунок и прогресс меткой является частью клетки: Apple's Voicemail audio cells http://apcmag.com/images/iphone-voicemail.jpgпользовательских UITableViewCell исчезают при хранении в MEMVAR
Таблица связана с CoreData, где каждый управляемый объект содержит ссылку на аудиофайлы для ячеек таблицы.
Поскольку метки воспроизведения, слайдера и времени воспроизведения звука являются частью каждой ячейки, каждый AudioCell (который является пользовательской ячейкой, наследующей от UITableViewCell) содержит объект AVAudioPlayer для ответа на действия пользователя (например, воспроизведение, пауза , и т.д...).
Когда я начинаю воспроизводить звук из ячейки, мне нужно сохранить эту ячейку в memvar, чтобы объект AVAudioPlayer внутри ячейки мог продолжать воспроизводить звук, а метки и слайдер обновлены правильно. Вот код, где я «сохранить» аудио воспроизведения ячейку MEMVAR: #pragma знак - AudioCellDelegate
- (void)playbackChangedForAudioCell:(AudioCell *)audioCell
{
if (self.audioPlayingCell.isPlaying && ![self.audioPlayingCell isEqual:audioCell]) {
[self.audioPlayingCell stopPlayback];
}
if (audioCell.isPlaying) {
self.audioPlayingCell = audioCell;
} else{
self.audioPlayingCell = nil;
}
// Mark the message as played.
Message *message = (Message *)[[self fetchedResultsControllerForTableView:self.tableView] objectAtIndexPath:audioCell.cellIndexPath];
[self messageSeenByUser:message];
}
Вот соответствующий код, где ячейка «восстанавливается» из MEMVAR, если он соответствует NSIndexPath что в настоящее время играет аудио:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSManagedObject *managedObject = [[self fetchedResultsControllerForTableView:tableView] objectAtIndexPath:indexPath];
UITableViewCell *cell = nil;
// Implement any new kind of message here.
if ([managedObject isKindOfClass:[VoicemailMessage class]])
{
if ([self.audioPlayingCell.cellIndexPath isEqual:indexPath])
cell = self.audioPlayingCell;
else {
AudioCell *audioCell = (AudioCell *)[self setupCellForVoicemail:(VoicemailMessage*)managedObject];
audioCell.cellIndexPath = indexPath;
cell = audioCell;
}
}
проблема в том, что, когда NSManagedObject обновляется:
- (void)messageSeenByUser:(Message *)message
{
if (self.view.window) {
if ([message.isNew boolValue])
{
message.isNew = [NSNumber numberWithBool:NO];
[[NSNotificationCenter defaultCenter] postNotificationName:MessageBadgeNotification object:self];
}
}
}
клетка исчезает п (пространство все еще существует, но я не вижу виджета из ячейки).
НО, если никаких изменений в объекте NSManagedObject и перезагрузка таблицы не исчезает.
Я хотел бы знать, что может привести к исчезновению ячейки, что-то должно отличаться от обычного обновления табличного представления и изменения управляемого объекта.