문제

iPhone 앱에는 Three20 프로젝트를 사용하고 있습니다. 나는 내 문제를 좁히고 이제 프로젝트와 함께 제공되는 '웹 이미지'예제를 다시 만들려고 노력하고 있습니다. 코드를 복사했습니다 바로 그거죠 프로젝트에서와 같이, TTNAVIGATOR (예제가하는)를 사용하지 않는 것을 제외하고는 tttableViewController를 tabbar에 수동으로 추가하고 있습니다.

문제는 다음과 같습니다. 예제와 같이 테이블의 이미지가 웹에서 자동으로로드되어야합니다. 그러나 그들은 단지로드됩니다 ~ 후에 테이블을 위아래로 스크롤합니다.

콘솔에서는 이미지를 다운로드한다고 명확하게 표시하고 활동 표시기가 영원히 회전하는 것을 볼 수 있습니다. 그리고 한 번 위아래로 스크롤하지 않으면 이미지가 나타나지 않습니다.

누구나? 미리 감사드립니다.

추신 : 임의의 uiview 에서이 코드를 사용하는 경우 작동하지 않습니다 (검은 색 사각형 만 표시).

TTImageView* imageView = [[[TTImageView alloc] initWithFrame:CGRectMake(30, 30, 100, 100)] autorelease];
imageView.autoresizesToImage = YES;
imageView.URL = @"http://webpimp.nl/logo.png";
[self.view addSubview:imageView];

이 코드를 내 AppDelegate에 넣으면 (창에 바로) 작동합니다. 이상하게?

가능한 해결책:이 목적으로 ttimageview 사용을 중단했지만 문제가 무엇인지 알았습니다. 스레딩 (따라서 DeNiz Mert Edincik의 답변을 받아들이려면). 기본적으로 비동기 다운로드를 시작한 경우 (기본적으로 모든 ttimageview이기 때문에, 비동기 다운로드이기 때문에) 메인 스레드는 시작되지 않습니다. 기본 스레드에서 다운로드를 시작하면 즉시 시작됩니다 ..

도움이 되었습니까?

해결책

나에게 스레딩 문제처럼 들립니다. 메인 런 루프에서 ttimageview를 만들고 있습니까?

다른 팁

나는 흥미로운 것을 찾았다. 조합 tttableviewcontroller, tttableviewdatasource 및 ttmodel을 사용하면 ttimageview를로드하는 것과 동일한 문제가 있습니다. 내 문제는 모델 메소드의 구현이 'IsLoading'및 'IsLoaded'를 모델링 한 후에 적절한 값을 반환하지 않는다는 것입니다. 이로 인해 'ViewDidAppear'메소드의 Manualy에서 Reload를 호출해야하며 이미지 로딩 문제가 발생합니다. 그래서 나는 'isloading'과 'isloaded'메소드를 수리하여 모델 초기 후에 '아니오'를 반환하면 모든 것이 정상입니다.

이미지가로드가 완료되면 ReloadData 메시지를 테이블보기로 보내십시오. 이를 통해 테이블이 행의 크기를 다시 계산하고 테이블을 다시 작성하도록합니다. 이 메시지에 대한 응답으로 이미지를 다시 다운로드하지 않도록주의하십시오.

이미지보기가 웹에서 자체 이미지를로드하는 곳과 비슷한 것을 썼습니다.

IM 내 경험, 이미지가 성공적으로로드되었지만 그 견해에 표시되지 않았을 때, 셀이 다시 그리기를 말해야하는 경우였습니다.

테이블 뷰를 스크롤하면 화면에 올 때 셀이 다시 그리기로 설정되므로 스크롤 할 때 나타납니다.

이미지가로드되면 셀에 메시지를 보내서 Redraw에 앉아 있다고 말하십시오.

이렇게하면 이미지가 다운로드가 완료되면 셀이 앉아있는 셀 (그리고 그 셀만)이 새 이미지를 보여주기 위해 스스로를 다시 그리됩니다.

전체 셀을 다시 그리기 할 필요가 없을 수도 있고 동일한 메소드 호출을 사용하여 이미지보기를 다시 그리기로 도망 갈 수 있습니다. 내 경험상, 내 테이블 셀은 계층 구조가 평평 해졌으므로 전체 셀을 다시 그리기를해야했습니다.

나는 당신에 대한 답이 없습니다 원하다 해야하지만, 나는 이것이 특징이며 예상되는 행동으로 간주된다고 말할 것입니다. 게으른 이미지로드를하고 싶을 때 uitableview에서 ttimageview를 사용합니다. ttimageView는 화면에서 프레임이 보이는 이미지 만로드합니다. 이렇게하면 장치는 네트워크 리소스를 사용하여 사용자가 보려고하지 않는 많은 이미지가 아닌 사용자가 가지고있는 이미지를 다운로드합니다.

친구 목록과 같은 수백 개의 썸네일 이미지가 포함될 수있는 긴 목록을 고려하십시오. 이전 장치에서 100 개 이상의 이미지 요청을 시작하면 메모리 사용이 지붕을 통과하고 앱이 충돌 할 것임을 경험합니다. ttimageview는이 문제를 해결합니다.

이것은 스레드 문제입니다. 라인을 포함하여 이미지를로드 할 수 있습니다.

[TTURLRequestQueue mainQueue].suspended = NO;

안에 - (void)didLoadModel:(BOOL)firstTime.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top