2010-03-23 3 views
0

테이블이있는 앱을 개발 중입니다. 테이블 셀에는 imageview (URL을 통해 이미지가 표시됨) 및 textview/webview가 있습니다. 나는 (이미지가 이미 없어 경우)정당한 이유없이 iPhone 앱이 다운 되나요?

- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

방법의 이미지를 얻을 수 및 배열에서 텍스트 뷰/웹보기의 텍스트를 설정하는 각 행에 대해 스레드를 시작합니다.

이미지가 수신 될 때 문제가 발생하고 난 다음과 같은 메시지를 제공하는 응용 프로그램이 충돌보기를 팝업 :

부울 _WebTryThreadLock (BOOL), 0x1a0670 : 다른 스레드에서 웹 잠금을 얻기 위해 시도 주 스레드 또는 웹 스레드보다. 이것은 보조 스레드에서 UIKit을 호출 한 결과 일 수 있습니다. 지금 충돌 중 ...

이제 셀에 추가 한 textview/webview를 릴리스하지 않으면 상황이 더욱 이상해집니다. 그러면 모든 것이 올바르게 작동합니다.

편집 : 충돌하지 않는 내가 내 질문에 분명 나는 희망 라벨

와 텍스트 뷰/웹보기를 교체 할 때 발생합니다. 혼란스러운 점이 있으면 의견을 말하십시오. 나는 이것을 해결할 필요가있다.

감사합니다, 스레드를 사용하는 큰 실수

Nikhil

+2

그것은 하나 같은 소리 :) 여기

코드의 일부입니다 귀하의 경우에는

, 당신의 응용 프로그램을 느리게하지 않으면 서 이미지를 다운로드 처리됩니다 비동기있는 NSURLConnection를 사용 귀하의 배경 스레드는 사용자 인터페이스에 무언가를하려하지만 (일반적으로) 기본 스레드 만 사용자 인터페이스 객체의 메소드를 호출해야합니다. – Isaac

+0

@Isaac : 질문 자체가 말한 바에 따르면 편집 지점이 중요합니다. –

답변

1

. 다른 해결책이 있다면 스레드를 사용하지 않도록하십시오!

- (void) startDownload { 
    self.activeDownload = [NSMutableData data]; 

    NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest: 
          [NSURLRequest requestWithURL: 
           [NSURL URLWithString:@"blablabla"]] delegate:self]; 
    self.imageConnection = conn; 
    [conn release]; 
} 

#pragma mark - 
#pragma mark Download support (NSURLConnectionDelegate) 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    [self.activeDownload appendData:data]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    NSLog(@"ERROR DOWNLOADING"); 
    // Clear the activeDownload property to allow later attempts 
    self.activeDownload = nil; 

    // Release the connection now that it's finished 
    self.imageConnection = nil; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSLog(@"FINISH DOWNLOAD"); 

    UIImage *image = [[UIImage alloc] initWithData:self.activeDownload]; 
    self.activeDownload = nil; 
    self.imageConnection = nil; 

    //do whatever you want with your image 

    [image release]; 
} 
관련 문제