2013-10-10 2 views
3

해당하는 URL로 서버에서 스트림 데이터를 읽으려고합니다. 현재 NSInputStream을 사용하여 데이터를 읽으려고합니다. 그러나 오류가 발생합니다. "오류 2 작업이 없습니다. 그런 파일이나 디렉토리가 없습니다. " 바이트로 데이터를 수신하는 웹 개발자는 그 데이터를 MemoryStream (byteData) [참고 : 웹 서비스는 .net으로 작성]와 같은 스트림으로 변환하고 나에게 반환했습니다. 그런 종류의 데이터를 읽는 방법은 무엇입니까, 크기가 0 바이트 인 파일을 가지고 AISHTTPRequest를 시도했습니다. NSURLConnction을 다시 시도했는데 크기가 0 바이트 인 파일을 얻었습니다. 이제 NSInputStream을 사용하고 있습니다. 시작시 언급 된 오류. 여기 NSInputStream 내 코드, 예 그럼 내가 어떻게 이런 종류의 데이터와 상호 작용해야하는 방법을 안내하는 경우 우리는 이러한 종류의 데이터를 읽을 수 있는지 여부를 나를 인도 해주십시오웹 서비스에서 스트림 유형의 데이터를 얻는 방법

는, 프론트 엔드로 아이폰 OS입니다이다. NSInputStream이 다음에 작성된 코드에서 문제를 해결하기위한 의도 된 방법 인 경우.

- (void)setUpStreamForFile { 

    NSString *urlStr = @"http://192.168.1.201/example/example.svc/example?parameter={\"DCU_DocId\":\"05e24018-b728-4ec8-9848-d6cae02bec95\"}"; 

    // iStream is NSInputStream instance variable 
    iStream = [[NSInputStream alloc] initWithFileAtPath:urlStr]; 
    [iStream setProperty:[NSDictionary dictionaryWithObjectsAndKeys:(id) kCFBooleanFalse, kCFStreamSSLValidatesCertificateChain, nil ] forKey:(NSString *) kCFStreamPropertySSLSettings]; 
    [iStream setDelegate:self]; 
    [iStream scheduleInRunLoop:[NSRunLoop currentRunLoop] 
         forMode:NSDefaultRunLoopMode]; 
    [iStream open]; 
} 

- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode { 
    _data = [[NSMutableData alloc] init]; 
    int bytesRead=0; 

    switch(eventCode) { 
     case NSStreamEventHasBytesAvailable: 
     { 
      if(!_data) { 

      } 
      uint8_t buf[20480]; 
      unsigned int len = 0; 
      len = [(NSInputStream *)stream read:buf maxLength:20480]; 
      if(len) { 
       [_data appendBytes:(const void *)buf length:len]; 
       // bytesRead is an instance variable of type NSNumber. 
       //[bytesRead setIntValue:[bytesRead intValue]+len]; 
       bytesRead = bytesRead +len; 
       NSLog(@"bytesRead:%d",bytesRead); 
      } 

      else { 
       NSLog(@"no buffer!"); 
      } 

      break; 
     } 
     case NSStreamEventEndEncountered: 
     { 
      [stream close]; 
      [stream removeFromRunLoop:[NSRunLoop currentRunLoop] 
           forMode:NSDefaultRunLoopMode]; 

      stream = nil; // stream is ivar, so reinit it 
      break; 
     } 
     case NSStreamEventErrorOccurred: 
     { 
      NSError *theError = [stream streamError]; 
      UIAlertView *theAlert = [[UIAlertView alloc] initWithTitle:@"" message:[NSString stringWithFormat:@"Error %i: %@",[theError code], [theError localizedDescription]] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
      NSLog(@"Error %i %@",[theError code], [theError localizedDescription]); 
      [theAlert show]; 

      [stream close]; 

      break; 
     } 
     case NSStreamEventOpenCompleted: 
     { 
      NSLog(@"EventOpen"); 
     } 
     case NSStreamEventHasSpaceAvailable: 
     { 
      NSLog(@"EventHasSpac"); 
     } 
     case NSStreamEventNone: 
     { 
      NSLog(@"EventNone"); 
     } 
     } 
} 
+0

iOS와 .Net 웹 서비스 간의 통신에 JSON을 사용하는 것이 좋습니다. 이것은 닷넷 개발자가 Base64와 같이 iOS 앱에서 읽을 수있는 JSON 형식의 바이트 스트림을 직렬화하도록합니다. – Lanorkin

답변

5

그것의 모든 스트리밍 데이터를 다운로드 할 수있는 NSURLConnection를 사용하여. 그것은 해결된다.

관련 문제