Ад всем :)обновление ячейки таблицы UI вида со статусом загрузки - IOS
Моего опыта работы с контроллером UITablewView в прошивке, к сожалению, весьма ограничен. Что мне нужно в моем приложении, это представление таблицы пользовательского интерфейса, которое содержит одну настраиваемую ячейку для каждой активной загрузки, загружаемой в настоящее время на веб-сервер (видео, аудио и т. Д.).
Каждый из этих загрузки запустить asynchrounously в фоновом режиме, и все должны иметь возможность обновлять такие вещи, как UILabels в своих клетках говорят что-то о процессе обновления в процентах и т.д.
Теперь я нашел решение который работает. Проблема в том, что я не знаю, действительно ли это безопасно или нет. Исходя из собственного вывода, я действительно не думаю, что это так. Я просто хочу получить ссылку на UIViews из создаваемой ячейки, а затем сохранить эти ссылки в загружаемых объектах, чтобы они могли изменять текст ярлыков и так далее.
My Own Решение
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CustomCellIdentifier = @"CustomCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: CustomCellIdentifier];
if (cell == nil)
{
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"UploadCellView" owner:self options:nil];
if ([nib count] > 0)
{
cell = customCell;
}
else
{
NSLog(@"Failed to load CustomCell nib file!");
}
}
NSUInteger row = [indexPath row];
UploadActivity *tempActivity = [[[ApplicationActivities getSharedActivities] getActiveUploads] objectAtIndex:row];
UILabel *cellTitleLabel = (UILabel*)[cell viewWithTag:titleTag];
cellTitleLabel.text = tempActivity.title;
UIProgressView *progressbar = (UIProgressView*)[cell viewWithTag:progressBarTag];
[progressbar setProgress:(tempActivity.percentageDone/100) animated:YES];
UILabel *cellStatusLabel = (UILabel*)[cell viewWithTag:percentageTag];
[cellStatusLabel setText:[NSString stringWithFormat:@"Uploader - %.f%% (%.01fMB ud af %.01fMB)", tempActivity.percentageDone, tempActivity.totalMBUploaded, tempActivity.totalMBToUpload]];
tempActivity.referencingProgressBar = progressbar;
tempActivity.referencingStatusTextLabel = cellStatusLabel;
return cell;
}
Как вы можете видеть, это то, где я думаю, что я делаю то, что не вполне достаточно: tempActivity.referencingProgressBar = ProgressBar; tempActivity.referencingStatusTextLabel = cellStatusLabel;
Действия по загрузке получают ссылку на элементы управления, хранящиеся в этой ячейке, и затем могут сами их обновлять. Проблема в том, что я не знаю, безопасно это или нет. Что делать, если ячейка, на которую они ссылаются, повторно используется или удаляется из памяти и т. Д.?
Есть ли другой способ, с помощью которого можно просто обновить базовую модель (мои действия по загрузке), а затем заставить представление таблицы пользовательского интерфейса перерисовать измененные ячейки? Не могли бы вы в конечном итоге подклассифицировать UITableViewCell и позволить им постоянно проверять загрузку, а затем заставить их загружать себя?
EDIT
Это как объекты деятельности загрузки называет их ссылающихся интерфейс управления:
- (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten
totalBytesWritten:(NSInteger)totalBytesWritten
totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite
{
if (referencingProgressBar != nil)
{
[referencingProgressBar setProgress:(percentageDone/100) animated:YES];
}
if (referencingStatusTextLabel != nil)
{
[referencingStatusTextLabel setText:[NSString stringWithFormat:@"Uploader - %.f%% (%.01fMB ud af %.01fMB)", percentageDone, totalMBUploaded, totalMBToUpload]];
}
}
Моя единственная забота в том, что, так как эти объекты запустить asynchrounously, что, если в какой-то данный момент Представление таблицы пользовательского интерфейса решает удалить или повторно использовать ячейки, на которые указывают эти объекты загрузки? Это совсем не очень безопасно.
Привет ~ Я хочу использовать «ApplicationActivities». Но я не знаю, что я добавляю в рамки. Пожалуйста, расскажите мне об этом. : -0 Спасибо! – hyekyung
ApplicationActivities - это мой собственный пользовательский класс как часть проекта :) Это не из какой-либо внешней структуры. – CodingBeagle