2010-11-19 39 views
0

私のiPhoneアプリケーションの別のスレッドでrssパーサーを取得しようとしていますが、これを行うとスピンインジケータしか表示されません何もない)。しかし、viewDidAppearの呼び出し[NSThread ....]をコメントアウトし、[self loadData]行のコメントを外すと、すべてが機能しますが、別のスレッドでは動作しません。何か不足していますか?あなたがここで提供できるどんな洞察力もありがとう!RSSは別スレッドでは動作しませんが、メインスレッドではうまく動作します

ここにコードがあります。すべてのUIの変更は、メインスレッド上でなされるべきである

- (void)viewDidAppear:(BOOL)animated { 

     [NSThread detachNewThreadSelector:@selector(loadData) toTarget:self withObject:nil]; 

       //[self loadData]; 

    [super viewDidAppear:animated]; 
} 



- (void)loadData { 

     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    if (items == nil) { 
     [activityIndicator startAnimating]; 

     Parser *rssParser = [[Parser alloc] init]; 
     [rssParser parseRssFeed:@"http://www.mywebsite.com/xml" withDelegate:self]; 

     [rssParser release]; 

    } else { 
     [self.tableView reloadData]; 
    } 
     [pool release]; 
} 

答えて

0

- (void)viewDidAppear:(BOOL)animated { 

    if (items == nil) 
    { 
     [activityIndicator startAnimating]; 
     [NSThread detachNewThreadSelector:@selector(loadData) toTarget:self withObject:nil]; 
    } 
    else 
    { 
     [self.tableView reloadData]; 
    } 
    [super viewDidAppear:animated]; 
} 

- (void)loadData { 

     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

     Parser *rssParser = [[Parser alloc] init]; 
     [rssParser parseRssFeed:@"http://www.mywebsite.com/xml" withDelegate:self]; 
     [rssParser release]; 

     [pool release]; 
} 

チェックitemsがnullの場合、それがある場合は、インジケータとをアニメーション開始し、その後、新しいスレッドを開始

+0

ありがとうございます。しかし、私はそれを試しましたが、それでも回転するインジケータでしか結果が得られません。繰り返しますが、NSThread行をコメントアウトしてその時点で[self loadData]を入れると、NSThread呼び出しで何かが考えられないようになります。 – Allen

+0

これによれば:http://www.iphoneexamples.com/、スレッドを正しく使用しています。あなたは 'performSelectorInBackground:'を試しましたか? –

+0

はい、うまくいきましたが、なぜ私は1つが動作し、もう1つは奇妙ではないと思うのですか? – Allen

関連する問題