2013-01-04 4 views
0

내 응용 프로그램은 온라인 XML 파일을 구문 분석합니다. 특정 키워드에 대한 XML의 각 항목에서 링크를 검색하여 NSString으로 반환하는 기능을 추가하려고합니다. 이 시간이 걸립니다,웹 사이트에서 텍스트를 빨리 추출하는 방법?

NSString *string = [NSString stringWithContentsOfURL:[NSURL URLWithString:articleUrl] encoding:NSUTF8StringEncoding error:nil]; 
      NSMutableArray *substrings = [NSMutableArray new]; 
      NSScanner *scanner = [NSScanner scannerWithString:string]; 
      [scanner scanUpToString:@"Thought:" intoString:nil]; 
      while(![scanner isAtEnd]) { 
       NSString *substring = nil; 
       [scanner scanString:@"Thought:" intoString:nil]; 
       if([scanner scanUpToString:@"</body>" intoString:&substring]) { 

        [substrings addObject:substring]; 
       } 
       [scanner scanUpToString:@"Thought:" intoString:nil]; 
      } 
      [substrings release]; 

문제는 XML이 많은 항목을 가지고, 그리고있는 TableView 세포가이 작업을 완료 할 때까지 나타나지 않습니다 : 그것은 사용하는 구문 분석 할 때 나는이 작업을 수행하도록 설정. 작동 할 수있는 더 빠른 방법이 있습니까?

답변

1

빨리 더 친척이 될 것입니다. (파일 크기, 검색 할 항목 수, 사용한 알고리즘 등) 몇 가지 다른 방법을 시도해 볼 수 있습니다. NSXMLParser가 또 하나입니다. NSRegularExpression은 또 하나입니다. 먼저 모든 링크를 캡처 한 다음 구문 분석하는 것이 더 효율적일 수 있습니다. 그러나 이것은 매우 일반적인 성명서입니다.

파싱하는 동안 UI를 응답하게 유지하려면 NSOperation의 하위 클래스를 만들고 백그라운드에서 해당 작업을 사용하십시오. NSOperation 서브 클래스가 완료되면 (또는 데이터 구조에 추가 된 각 항목에 대해) 주 스레드에서 알림을 보냅니다. 앱을 위임자 (또는 컨트롤러가 무엇이든지간에)에게 알리도록합니다. 완료를 위해 별도의 알림을받을 수 있으며 진행 표시기 중지를 제공하는 데 활용할 수 있습니다.

응답 성이 뛰어난 UI, 콜백 및 업데이트 할 수있는 후크를 제공합니다.

관련 문제