2013-01-04 17 views
0

我的應用程序解析在線XML文件。我正在嘗試添加一個功能,該功能將掃描xml中每個項目的某些關鍵字的LINK,並將它們返回給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,回調和鉤子更新。