2012-06-25 7 views
0

externa style.css 시트가있는 간단한 index.html을 다운로드하도록 NSURLRequest를 설정하려고하지만이 작업을 수행하는 방법을 잘 모르겠습니다. 내가 원하는 파일에 대한 요청입니다. 그러나 이것은 약간 달라야하며 제가하려고하는 것에 대한 좋은 예를 찾을 수 없습니다.여러 매개 변수가있는 NSURLRequest

이 내 코드는 지금까지 있습니다 :

#pragma mark - NSURLConnection methods 

- (void)htmlRequest 
{ 
    // Create the request. 
    NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.mywebsite.com/index.html"] 
               cachePolicy:NSURLRequestReloadIgnoringCacheData 
              timeoutInterval:60.0]; 

    // create the connection with the request 
    // and start loading the data 
    NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self]; 
    if (theConnection) { 
     // Create the NSMutableData to hold the received data. 
     // receivedData is an instance variable declared elsewhere. 
     receivedData = [NSMutableData data]; 
    } else { 
     // Inform the user that the connection failed. 
     NSLog(@"Connection Fail"); 
    } 
} 


- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    // This method is called when the server has determined that it 
    // has enough information to create the NSURLResponse. 

    // It can be called multiple times, for example in the case of a 
    // redirect, so each time we reset the data. 

    // receivedData is an instance variable declared elsewhere. 
    [receivedData setLength:0]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 

    // Append the new data to receivedData. 
    // receivedData is an instance variable declared elsewhere. 
    [receivedData appendData:data]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    // inform the developer of error type 

} 

// This method uses methodName to determin which Initalizer method to send the response data to in EngineResponses.m 
- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
// EngineResponses *engineResponses = [EngineResponses sharedManager]; 

//  [engineResponses GetManufacturers:receivedData]; 

    NSString *myString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding]; 
    NSLog(@"%@", myString); 

} 

당신은 그냥 직접 .. 내 요청을 포맷 그래서 내가 index.html을 등을 얻는 방법을 알고 싶습니다 index.html을 호출하고 볼 수 글쎄 style.css

어떤 도움을 주시면 대단히 감사하겠습니다.

답변

1

나는 항상 가변 배열이 데이터 구조를 유지하여이

@interface connectionWrapper : NSObject 
@property(retain) NSURLRequest *request 
@property(retain) NSURLConnection *connection 

같은 델타 연결 속성과 - 요청 속성이 새로운 데이터 구조를 생성, 당신은 콜백에서 연결을 구별 할 수있다 메서드를 반복하고 각 connectionWrapper 인스턴스의 -connection 속성을 connection 매개 변수와 비교하여 일치하는 경우 (동일한 객체를 가리키는 경우) connectionWrapper 인스턴스의 -request 속성을 검색 한 다음 -url NSURLRequest 인스턴스의 속성

나는 영어 원어민이 아니기 때문에 코드가 더 나은 교사라고 생각합니다. 콜백 메소드에서

-(NSURLRequest*)getRequestByConnection:(NSURLConnection*)connection 
{ 
    for(connectionWrapper *w in theArrayContainingAllConnectionWrappers) 
    { 
     if(w == connection) 
      return w.request; 
    } 
} 

:

-(void)connection:(NSURLConnection*)connection didReceiveResponse(NSURLResponse*)response 
{ 
    NSURLRequest *request = [self getRequestByConnection:connection]; 
    NSURL *url = [request url]; 
    /*apply different approach to different url/* 
} 

PS : 우리가 쉽게 연결과 관련된 요청을 검색 할 수 있도록있는 NSURLConnection이 - 요청 속성이하지 않는 것이 매우 슬프다.

+0

내 무지를 용서하지만, 콜백 메소드는 무엇입니까? – HurkNburkS

+0

이름이 connection으로 시작하는 메소드 : – CarmeloS

+0

괜찮습니다. 그 다음에는 그들에 대해 더 알 필요가 있습니다. 콜백에서 distinguidh라고 말하면 요청이 끝날 때까지 요청을하는 방법이 있습니까? 돌아가서 파싱 한 데이터에 따라 새 파일을 자동으로 가져 오는 중입니까? – HurkNburkS

0

.css 파일의 이름을 알고 있습니까?

만약 그렇다면 나는 단지 2 개의 요청을 할 것입니다. 그렇지 않으면 당신은 css에 대한 링크를 찾고 어쨌든 두 번째 요청을하는 파서를 작성해야합니다.

나는 또한 고급 기능으로 무거운 짐을 덜어 줄 수있는 훌륭한 라이브러리를 제공하기 위해 도서관을 조사하는 것이 좋습니다.

는 여기에 내가 사용한 3의 :

http://blog.mugunthkumar.com/coding/ios-tutorial-advanced-networking-with-mknetworkkit/

https://github.com/tonymillion/TMHTTPRequest

https://github.com/pokeb/asi-http-request

+0

전에 asihttprequest를 사용 했었지만, 중단되었으므로 NSURLRequest로 이동하지 않았습니다. 나는 괜찮다고 만 생각합니다. 나는 약간의 추가 작업을 의미하는데, 내 파서 메서드를 많이 사용 했었습니다. 일부 snazzy 바로 가기는 CSS 파일 등 .. 정상적으로 메신저 그냥 SQL에서 데이터를 잡아 PHP 스크립트를 호출 ..이 html/CSS는/자바 스크립트 물건 내가 다르게 그것에 대해 가야만했다면 전에 상처 받기 전에 노력했다. – HurkNburkS

+0

답장을 보내 주셔서 감사합니다. – HurkNburkS

1

방법 중 하나 또는 다른, 당신은이 개 요청을해야합니다. 웹 브라우저에서 직접 웹 페이지를 열어도 브라우저는 HTML에서 참조하는 CSS 파일을 별도로 요청합니다. 응용 프로그램에 HTML과 CSS 파일이 모두 필요한 경우에는 먼저 HTML을 가져온 다음 CSS 파일을 가져 오는 두 개의 별도 URL 요청을 수행해야합니다.

이제 2 개의 요청을해야하기 때문에 항상 두 요청을 작성하는 코드를 작성해야하는 것은 아닙니다. @Slee에서 권장하는 것과 같은 라이브러리가 자동으로 첫 번째 요청의 결과를 가져 와서 구문 분석하고 참조 된 CSS 파일을 요청할 수 있습니다.나는 그들과 함께 일하지 않았기 때문에 그들이 무엇을지지하는지, 또는 어떤 도서관이 당신을 위해 이것을 할 것인지 확신 할 수 없다.

HTML 및 CSS를 수동으로 처리하는 대신 UIWebView를 통해로드하는 것이 좋습니다. UIWebView는 HTML 파일을 UI 구성 요소로로드, 구문 분석 및 렌더링하려고 시도합니다. 이 과정에서 참조 된 CSS 및 JavaScript 파일을로드하여 렌더링에 적용합니다. CSS 파일을로드하는 호출을 인터셉트하는 것과 같은 특별한 작업을 수행하려는 경우 UIWebViewDelegate 프로토콜을 구현하고 UIWebView의 대리자를 설정할 수 있습니다. 해당 델리게이트 내에서 웹보기에서 CSS 파일을로드 할 때 -webView:shouldStartLoadWithRequest:navigationType: 메서드를 구현하여 알림을받을 수 있습니다. 이 메서드에 대한 호출을 사용하여 CSS에 대해 발행 된 요청을보고 요청과 관련하여 흥미로운 작업을 수행 할 수 있습니다.

+0

대단하다! 대단히 고마워요. 현재 직면하고있는 문제들과 관련하여 많은 의미를 갖습니다. :) 이제는 이것을 읽고 어떻게해야 할지를 알아야합니다.하지만 고맙습니다. 이제해야 할 일과하지 말아야 할 것입니다. 이제는 ios 라이브러리의 몇 가지 함수를 확인하고 예제 코드를 살펴 보는 것입니다. 시간을내어 확실한 응답을 제공하십시오. – HurkNburkS

+0

데이터를 다운로드하여 UIWebView에 추가 한 다음 UIWebView를 통해 직접로드 할 수있게되었습니다. 지금부터 살펴 보겠습니다! – HurkNburkS

관련 문제