Pergunta

Eu estou usando o projeto three20 para meu iPhone app. Eu reduzi o meu problema para baixo e agora estou apenas tentando recriar os 'Web Imagens na tabela' exemplo que vem com o projeto. Copiei o código exatamente como no projeto, com a ressalva de que eu não uso o TTNavigator (que o exemplo faz), mas estou acrescentando minha TTTableViewController manualmente a uma barra de páginas.

O problema é o seguinte; as imagens na tabela deve carregar automaticamente a partir da web, como no exemplo. Mas eles só carga após eu rolar a tabela para cima e para baixo.

No console diz claramente ele está baixando as imagens, e você vê o giro indicador de atividade como sempre .. E a menos que eu vá para cima e para baixo uma vez, as imagens nunca aparecerá.

Anyone? Agradecemos antecipadamente.

P.S: Se eu estou usando esse código em qualquer UIView aleatório, Ele também não funciona (só mostra um quadrado preto):

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];

Se eu colocar esse código no meu AppDelegate (à direita na janela), ela não funciona .. estranho?

Solução possível: Embora eu parei de usar TTImageView para este fim, eu acho que eu descobri qual era o problema; rosqueamento (daí aceitar a resposta de Deniz Mert Edincik). Se eu começasse a transferência assíncrona (porque, basicamente, que é tudo o TTImageView é, um download assíncrono) a partir de qualquer lugar, mas o segmento principal, não iria começar. Se eu começasse a descarga no segmento principal, que começará imediatamente ..

Foi útil?

Solução

soa como um problema de threading para mim, você está criando TTImageView na RunLoop principal?

Outras dicas

I encontrar uma coisa interessante. Quando uso combinação TTTableViewController, TTTableViewDataSource e TTModel I têm mesmo problema com carga TTImageView. Meu problema era que minha implementação de métodos de modelo 'isLoading' e 'isLoaded' não retornam valores adequados após a inicialização do modelo. Que as forças de me chamar de recarga do modelo manualmente no método 'viewDidAppear' e que causa problema de imagem carregamento. Então eu reparar o meu 'isLoading' e 'IsLoaded' métodos para tanto retorno 'NÃO' após Modelo o init, e está tudo bem.

Quando uma imagem terminar o carregamento tente enviar uma mensagem reloadData à vista de tabela. Isso força a mesa para recalcular o tamanho das linhas e redesenhar a tabela. Basta ter cuidado que você não começar a baixar a imagem novamente em resposta a esta mensagem.

Eu escrevi algo semelhante a este, onde uma visão imagem irá carregar a sua própria imagem a partir da web.

Im minha experiência, quando a imagem tinha carregado com êxito, mas não foi mostrado, em sua opinião, foi um caso em que a célula precisava ser contada para redesenhar.

Quando você rolar a exibição de tabela, as células são definidas para redesenhar quando o vir na tela, razão pela qual eles aparecem quando você rolar.

Quando a imagem é carregada, diga a célula que está sentado em redesenhar, enviando-o setNeedsDisplay mensagem.

Dessa forma, quando os acabamentos imagem de baixar, a célula sessão em (e somente essa célula) irá redesenhar próprio para mostrar a nova imagem.

É possível que você não pode precisar de redesenhar toda a célula e pode ser capaz de conseguir com um simples redesenhar a visualização da imagem usando a mesma chamada de método. Na minha experiência, minhas células da tabela visualizar hierarquia foi achatada, por isso tive de redesenhar toda a célula.

Eu não tenho uma resposta para o que você deseja para fazer, mas vou dizer que este é considerado um recurso, e o comportamento esperado. Você usa TTImageView em UITableView quando você quer fazer o carregamento lento de imagens. TTImageView só irá carregar as imagens cujos quadros são visíveis na tela. Dessa forma, o dispositivo utiliza os seus recursos de rede para download de imagens que o usuário tem na frente deles, em vez de um monte de imagens que o usuário não está mesmo tentando olhar.

Considere ter uma longa lista que pode conter um par de centenas de miniaturas de imagens (como uma lista de amigos). Sei por experiência própria que, se você chutar fora de 100+ solicitações de imagem em dispositivos mais antigos, o uso de memória vai atravessar o telhado, e seu aplicativo provavelmente vai falhar. TTImageView resolve este problema.

Este é um problema rosca. Você pode carregar as imagens, incluindo a linha:

[TTURLRequestQueue mainQueue].suspended = NO;

em - (void)didLoadModel:(BOOL)firstTime.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top