Второй сбой NSThread - PullRequest
       5

Второй сбой NSThread

0 голосов
/ 09 марта 2011

Мое приложение, когда пользователь открывает его, запускает NSThread для загрузки новых данных (анализ файла xml). это код (в AppDelegate.m):

- (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];
}

Работает отлично!

В первом представлении есть табличное представление: первая ячейка должна прочитать 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];

работает без проблем!

Вы знаете, что я делаю не так?

1 Ответ

0 голосов
/ 09 марта 2011

Ваши сообщения объектам UIKit / AppKit должны быть сделаны из основного потока.это так, если вы не расширили объект и не добавили явно поддержку MT в этих разделах.

Foundation определяет несколько удобных методов (например, -[NSObject performSelectorInBackground*, -[NSObject performSelectorOnMainThread*), поэтому вы можете удалитьбольшая часть шаблона в вашем примере, а также сообщения для объектов UIKit из основного потока.

если проблема не устранена, вы можете опубликовать более подробный пример.

...