2014-11-20 1 views
0

PHP로 내 서버의 이미지를 가져 오는 스크립트가 있습니다. Objective-C로 보낼 수 있기를 바랍니다. 이미지를 반환하고 작동하지 않는 것으로 보이는 많은 메소드를 시도했습니다. 이미지를 내 서버에 디렉토리에 저장하고 앱에 보낼 수 있기를 원합니다. 이것은 현재 코드입니다 :PHP를 사용하여 Objective-C로 이미지를 반환하는 방법은 무엇입니까?

코드는 단지 이미지를 변경하지 않습니다. PHP가 이미지를 제대로 보내고 있는지 확인하는 방법을 모르겠습니다.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"myserverurl"]]; 
    [request setHTTPMethod:@"POST"]; 

    NSString *body = @"username=benr783&password=testpassword"; 
    [request setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]]; 
    NSURLConnection *connect = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    [connect start]; 

} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { 
    self.image.image = [UIImage imageWithData:data]; 

} 
+0

정말 didReceiveData''에서'data'을 확인 했 이미지? PHP가 이미지 콘텐츠 유형으로 응답합니까? – Raptor

+0

@Raptor 어떻게 확인하나요? – Benr783

+0

먼저 nsurlconnection의 대리인을 이해하거나 다루기가 더 쉬운 블록을 사용하십시오 – chings228

답변

0

관찰의 커플 :

  1. 당신은 당신이 당신의 didReceiveData 방법에 대한 단일 호출로 전체 이미지를 받게된다는 것을 가정 한 것으로 나타났습니다. 그것은 유효한 가정이 아닙니다. (이미지가 하찮게 작은 않는 사실,이 사실 않을 수 있습니다.)

    는 연결을 시작하기 전에 NSMutableData 객체가, didReceiveData, 당신은 단지 그 NSMutableData에 수신 된 데이터를 추가해야 인스턴스화 한 다음 connectionDidFinishLoading에서, didReceiveData에 대한 여러 통화에서 수신 된 모든 데이터를 하나의 NSMutableData으로 결합하면 이제 그 최종 NSMutableData을 가져와 UIImage으로 변환하려고 시도 할 수 있습니다. 당신이 startImmediately 옵션 및 (만 특별한 경우에 사용) NO로 설정하는 옵션을 initWithRequest의 연주를 사용하는 경우

  2. BTW 만 start를 호출합니다. 이 경우 해당 전화 번호 start을 삭제하면됩니다.

  3. 수신 된 데이터가 실제로 이미지인지 확인해야합니다. 예를 들어 didReceiveResponse에서 NSURLResponse의 메시지가 statusCode이고 메시지가 didFailWithError이 아니 었는지 확인하십시오. 등

    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { 
        if ([response isKindOfClass:[NSHTTPURLResponse class]]) { 
         int statusCode = [(NSHTTPURLResponse *)response statusCode]; 
         if (statusCode != 200) { 
          NSLog(@"statusCode != 200; it is %ld", (long)statusCode); 
         } 
        } 
    } 
    
  4. 당신은이 거래는 Charles을 사용하여 개최하고 응답의 이미지를 확실하게보고 할 수 있습니다, 등등

+0

이미지가 여러 번 나오면 한 번에 어떻게 가져올 수 있습니까? – Benr783

+0

당신은 그것을 제어 할 수 없습니다. 당신은 그것을 부분적으로 생각할 것입니다. 그래서'NSMutableData' 속성을 생성하고, 연결을 시작하기 전에 그 속성을'[NSMutableData data]'로 초기화하고,'didReceiveData'는받은 데이터를 NSMutableData에 추가하고,'connectionDidFinishLoading '의'UIImage' 만 변환하면됩니다 '. – Rob

+0

또는 chings228에서 제안한 것처럼이 복잡한 위임 기반 접근 방식을 포기하고'sendAsynchronousRequest'와 같은 것을 사용하면 훨씬 간단합니다. – Rob