Я пытаюсь создать класс диспетчера загрузки, который упаковывает все асинхронные операции загрузки (каждая операция имеет свой собственный поток) в подклассе NSOperation, чтобы добавить их позже в NSOperationQueue.Класс менеджера загрузки (одноэлементный) также предоставляет несколько методов для работы с очередью и отмены операций, соответствующих некоторым требованиям.
Это шаги, чтобы начать создание класса Class Cluster (Abstract Factory), который возвращает различные виды NSOperation для различных типов общих операций (выгрузка, загрузка, анализ и т. Д.).
Класс, кажется, работает довольно хорошос операциями загрузки, но если в середине этих операций я вызываю метод для отмены операции, операция успешно отменяется, но приложение завершается несколькими операциями позже.Если я не отменяю никаких операций, все работает нормально.Все операции наблюдаются с использованием КВО.Метод удаления операции выглядит следующим образом:
- (void) cancelDownloadOperationWithID:(NSString *)aUUID{
@synchronized(self){
[self.dowloadQueue setSuspended:YES]; //downloadQueue is an NSOperationQueue
NSArray * downloadOperations = [self.dowloadQueue operations];
NSPredicate * aPredicate = [NSPredicate predicateWithFormat:@"SELF.connectionID == %@",aUUID]; //SELF is the signleton instance of the download manager
NSArray * filteredArray = [downloadOperations filteredArrayUsingPredicate:aPredicate];
if ([filteredArray count]==0) {
[self.dowloadQueue setSuspended:NO];
return;
}
[filteredArray makeObjectsPerformSelector:@selector(cancel)];
NSLog(@"Cancelled %d operations",[filteredArray count]);
[self.dowloadQueue setSuspended:NO];
}
}
Журнал сбоев довольно непонятен, но представляет собой BAD_EXC_ACCESS (возможно, зомби), обратите внимание, что я нахожусь под ARC.1009 *
Может кто-нибудь дать мне совет по этому поводу?
Спасибо Андреа