0

WebからXMLフィードを取得する最初のアプリを開発しています。

XMLが初めてに読み込まれるときTableViewはすべて正常ですが、ボタンをタップしてデータを再読み込みする場合は、XMLとテーブルビューを再読み込みする前に数秒間停止します。この停止時間を回避するにはどうすればよいですか?

テーブルセルをタップして次のセルに移動するとTableViewController、リストを表示するためにXMLフィードをロードしている間も数秒間停止します。

私のアプリはiPhoneのネイティブブログアプリのようなもので、カテゴリとサブカテゴリがあります。

4

1 に答える 1

0

次のプロセスを参照してください。


@interface YourViewController : UITableViewController<NSURLConnectionDelegate,NSXMLParserDelegate>
//some declartion property...
@end

@implementation YourViewController

- (void)viewDidLoad
  {
    [super viewDidLoad];

    isParsingStart = NO;
    webData = [[NSMutableData alloc] init];
    connection = [[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:YOUR_XML_URL] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:20] delegate:self];
  }

 - (void)tappingButton:(UIButton *)sender
  {   
    if(isParsingStart)
    {
      //show a alert view... or other do stuff 
      return;
    }
     webData = [[NSMutableData alloc] init];
     connection = [[[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:YOUR_XML_URL] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:20] delegate:self] autorelease];
  }

  - (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
  {
     [webData appendData:data];
  }

 - (void) connectionDidFinishLoading:(NSURLConnection *)connection
  {

     parser = [[NSXMLParser alloc] initWithData:webData];
     parser.delegate = self;
     if([parser parse])
     {
       isParsingStart = NO;
       NSLog(@"The XML is Parsed.");
       [[self tableView] reloadData];
     }
     else 
     {
        isParsingStart = NO;
        NSLog(@"Failed to parse the XML");
     }

       [webData setData:nil];
  }

- (void)parserDidStartDocument:(NSXMLParser *)parser
  {
      isParsingStart = YES;
  }

  - (void)parserDidEndDocument:(NSXMLParser *)parser
  {
      //do stuff
  }

  - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
  {
     // do stuff
  }

  - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
  {
     // do stuff
  }

           .
           .
           .
于 2012-07-14T04:36:09.217 に答える