2011-03-09 157 views
0

我的應用程序,當用戶打開它,啓動NSThread下載新數據(解析XML文件)。 這是代碼(在AppDelegate.m):第二次NSThread崩潰

- (void)applicationDidBecomeActive:(UIApplication *)application { 
     NSThread* parse_thread = [[NSThread alloc] initWithTarget:self selector:@selector(load_data) object:nil]; 
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES; 
[parse_thread start]; 
[parse_thread release]; //is it right? 

-(void)load_data{ 
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
... //here the parser 
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO; 
[pool release]; 
[NSThread exit]; 
} 

它工作正常!

在第一個視圖中有一個tableview:第一個單元格需要讀取用戶位置的GPS座標並解析url中的其他數據。

這是代碼(在myview.m):

- (void)locationUpdate:(CLLocation *)location { 
loc = location; 
[locationController.locationManager stopUpdatingLocation]; 
NSThread *parse_2 = [[NSThread alloc] initWithTarget:self selector:@selector(load_data_2) object:nil]; 
[parse_2 start]; 
[parse_2 release]; 
} 

-(void)load_data_2{ 
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init]; 
//here the parse 
[pool release]; 
[NSThread exit]; 
} 

所以...當用戶觸摸該單元格,應用程序崩潰!並且控制檯沒有一個日誌! (如果呼叫時不使用方法的NSThread

[self load_data_2]; 

它的工作原理沒有問題!

你知道我在做什麼錯?

+0

不要使用'[NSThread exit]',這是沒有必要的。除此之外,如果沒有來自控制檯的錯誤信息,那麼這裏就不會有太多的事情要做。 – Anomie 2011-03-09 18:25:53

回答

0

你的消息的UIKit/AppKit的對象應該是除非你已經擴展了一個對象並明確地在這些部分添加了MT支持

基金會定義了一些便利方法(例如,-[NSObject performSelectorInBackground*-[NSObject performSelectorOnMainThread*),因此您可以刪除示例中的大部分樣板,以及從主線程向UIKit對象發送的消息。

如果問題仍然存在,您可能需要發佈更徹底的示例。

+0

對不起,我不明白...我正在做什麼UIKit/AppKit對象的消息? – JAA 2011-03-09 18:01:04

+0

'[UIApplication sharedApplication] .networkActivityIndi​​catorVisible = NO;'< - 這是您發佈的示例中的一個。代碼中還存在基本的內存管理和同步問題。 – justin 2011-03-09 18:06:55

相關問題