2013-07-04 1 views
0

2 개의 URL이 xml 파일에서 전달되고 UITableView에서 상세보기로 전송되는 iphone 응용 프로그램을 만들고 있습니다. segue는 UIImageView에로드됩니다. 이 내 prepareForSegue 방법입니다 :Xcode iphone 프로그래밍 : URL 문자열을 segue를 통해 XML 파일에서 구문 분석하여 UIImageView에로드합니다.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"detail"]) { 
     NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
     NSMutableString *imgURL1 = [feeds[indexPath.row] objectForKey: @"imageURL1"]; 
     [[segue destinationViewController] setImg1:imgURL1]; 
     //img1 is declared in the detailviewcontroller class 
    } 
} 

그리고 이것은 내 detailViewController에있는 viewDidLoad입니다 :

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSURL * imageURL1 = [NSURL URLWithString:self.img1]; 
    NSData * imageData1 = [NSData dataWithContentsOfURL:imageURL1]; 
    UIImage * imag1e = [UIImage imageWithData:imageData1]; 
    appImage1.image = imag1e; 
    //appImage1 is also declared in the detailViewController class 
} 

이제 문제입니다 내가 아무것도 appImage1에 표시되지 않은 응용 프로그램없이 오류를 실행할 때 또는 버그가보고되었습니다. 당신의 도움에 대한 덕분에 여기

+1

이'스토리 보드에서 설정 appImage1' 경우 : SEGUE 방법은 다음과 같습니다 있도록 XML 파서 내가했던 일은, 그래서 처음에 공백으로 url 변수에 URL을 저장했다가 stringByTrimmingCharactersInSet를 사용하는 것입니다? 실제로 설정 되었습니까? 또한 주 스레드에서'dataWithContentsOfURL'을 사용하는 것은 좋지 않습니다. – Wain

+0

예 스토리 보드에서 설정됩니다 –

+0

그리고 '피드'에 실제로 생각하는 내용과 생각하는 부분이 포함되어 있는지 확인하기 위해 디버깅했습니다. – Wain

답변

1

몇 가지 문제 :

1) 당사 가변 문자열? NSString이면 충분합니다.

2) "선택한 행"에 의존하는 것이 안전하지 않습니다. 이것은 행을 선택하는 것의 부작용입니다. 이상적으로는 발신자를 사용해야합니다.

NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell*)sender]; 

3) 메인 스레드에서 URL로드를 호출하지 마십시오. 오히려 NSURLRequestNSURLConnection과 함께 비동기 로딩을 사용하십시오. didFinishLoading 콜백에 이미지를 설정하십시오.

4) 잘못 갈 수 밖에 무엇 확인 :

  • 이미지보기가 전무하다.
  • 문자열이 nil입니다.
  • URL이 nil이거나 잘못되었습니다.
  • 서버가 응답하지 않거나 데이터를 보내지 않거나 너무 오래 걸립니다.
+0

제 경우 비동기 로딩을 사용하는 방법에 대한 예제를 보내 줄 수 있습니까? –

+0

예. [this] (http://stackoverflow.com/a/7421584/427083) 질문에 대한 답변에서 내 코드를 살펴보십시오. – Mundi

+0

감사합니다! : D –

0

문제가 해결되었습니다. 분명히 URL에 문제가있었습니다.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 

//sends the image link 
    NSString *imageURLS = [feeds[indexPath.row] objectForKey: @"appImageURL"]; 
    imageURLS = [imageURLS stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
    NSURL *img = [NSURL URLWithString: imageURLS]; 
    [[segue destinationViewController] setAppImageURL:img]; 
} 
+0

당신은 분명히 당신을 도왔습니다. StackOverflow에 오신 것을 환영합니다! – Mundi

+0

네 맞아 !! 고맙습니다. –

+0

아직 답변을 수락하지 않았습니다. 내 대답의 투표 번호 아래에있는 체크 표시를 클릭해야합니다. StackOverflow에 오신 것을 환영합니다! – Mundi