Вызов [parser abortParsing]
, безусловно, остановит синтаксический анализатор, но почему вы ожидаете, что он остановит остальную часть вашего кода - все, что вы сделали, - попросили строку [parser parse];
завершить досрочно - анализатор все равно может вернуть YES, как мог бы удалось успешно разобрать - ошибка не возникла, вы попросили ее остановить!
Поскольку ваш синтаксический анализатор находится в отдельном потоке, вы должны будете сообщить этому потоку, что он вам больше не интересен (фактически, вы освободите синтаксический анализатор на этом этапе, поэтому он может больше не существовать).
Вам понадобится другое свойство в вашем объекте, которое ваша нить проверит
@property (assign) BOOL cancelThread; // deliberate lack of nonatomic here!
Установите это значение в false перед тем, как отсоединить новую тему:
- (void) viewDidLoad {
self.cancelThread = NO;
[NSThread detachNewThreadSelector:@selector(loadstuff)toTarget:self withObject:nil];
}
и затем, внутри вашего viewWillDisappear
метода, установите для него значение YES
:
- (void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
self.cancelThread = YES;
[xmlParser abortParsing];
[xmlParser release];
xmlParser = nil;
}
Наконец, проверьте это свойство в своей ветке, чтобы увидеть, нужно ли вам заканчивать раньше, т.е.
...
BOOL success = [xmlParser parse];
if (self.cancelThread) {
[pool release];
return;
}
if (success) {
NSLog(@"No Errors");
...
Надеюсь, это поможет,
Sam