2013-02-02 4 views
0

UITableViewCell 내에서 진행보기를 개발하려고합니다.셀에서 진행률이 다운로드 됨

내 첫 번째 실현에서 나는 내 셀 안에 AFHTTPRequestOperation과 그 setDownloadProgressBlock:^을 사용했습니다.

나중에 내 목표는 더욱 복잡해졌습니다. 다른 콘텐츠 (노래 재생 목록)를 표시하는 하나의 UITableView이 있습니다. 동일한 노래가 여러 재생 목록에서 종료 될 수 있습니다. 하나의 재생 목록에서 노래를 다운로드하고 다른 노래 (이 곡도 포함)로 전환하기 시작하면 첫 번째 재생 목록에서와 같이 다운로드 진행 상황을보고 싶습니다.

나는 그것을 만드는 데 성공했다. 다운로드 프로세스가 시작될 때 전역 클래스에서 진행 뷰를 작성합니다. 셀의 진행보기를 표시하려면 addSubviewremoveFromSuperview을 사용하면됩니다. 하지만 기존의 진행률보기 위에 진행률보기를 추가해야하므로 (모든 셀에 응용 프로그램 디자인으로 인해 자체 진행률보기가 있기 때문에)이 방법이 마음에 들지 않습니다.

이제 다른 접근 방식을 사용합니다. 셀을 표시 할 때 setDownloadProgressBlock:^을 기존 진행률보기로 설정합니다. 나는 잘 작동하지만 다른 재생 목록을 열면 다른 노래에도 진행 상태가 표시됩니다. 내가 사용하는 재사용 가능한 셀 때문일거야.

저는이 문제를 구현하는 데 약간의 어려움이 있습니다. 아이디어를 올바르게 작성하는 방법은 무엇입니까?

답변

1

셀 재사용으로 인해 각 개별 셀을 다운로드 진행 콜백으로 연결하는 것이 적절하지 않습니다. 이 문제를 해결하기 위해 Song 개체에 다운로드 상태를 저장하고 YES으로 설정하면 알림을 받기 시작합니다.

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(progressDidUpdate:) name:kSongDownloadProgressUpdateNotificaton object:nil]; 

는 진행, AFHTTPRequestOperation의 블록을 다시 부르는 노래 ID 식별자와 name:kSongDownloadProgressUpdateNotificaton을 보낼 수 있습니다.

각 셀의 progressDidUpdate:에서 업데이트 진행 상황을 확인하십시오. 무시하지 않으려면 해당하는 경우 진행률보기를 업데이트하십시오. 다운로드가 끝나면 알림 관찰을 제거하십시오.

는 또한 jQuery과 저장 및 진행 상황을 복구하면 다운로드 상태를 지속 할 것, cellForRowAtIndexPath를 호출하고 Song 어떤 순간에 다른 셀에 할당 할 때부터 Song 객체의 다운로드 비율 데이터를 저장해야합니다.

+0

노래 개체가 핵심 데이터에 있습니다. 진행 상황을 저장하고 핵심 데이터를 업데이트하는 것이 좋은 생각입니까? – iWheelBuy

+0

@iWheelBuy 노래 ID를 다운로드 상태로 매핑하는 별도의 NSMutableDictionary를 만들 수 있습니다. – overboming

+0

모든 것이 훌륭하게 작동합니다! – iWheelBuy