В вашем start
методе вы никогда не вызываете правильный метод инициализации, вы вызываете:
MKAsyncImageDownloader *downloader = [[MKAsyncImageDownloader alloc] init];
Вы должны звонить
MKAsyncImageDownloader *downloader = [[MKAsyncImageDownloader alloc] initWithDelegate:myDelegate];
Тогда вы говорите, что установили loader
объект в другом месте? Это два отдельных объекта, на которые вы, кажется, на самом деле используете, на которые ссылаются выше.
То есть:
loader = [[MKAsyncImageDownloader alloc] initWithDelegate:self];
не делает
MKAsyncImageDownloader *downloader = [[MKAsyncImageDownloader alloc] init];
работа. Ваша MKOperation не имеет ссылки на ваш класс loader
, для которого установлен делегат.
Вы заявляете:
MKOperation.m Подкласс NSOperation. Я выделяю / инициализирую MKAsynImageDownloader для выполнения только селектора.
Я думаю, вы неправильно понимаете, что вы здесь делаете. Вы создаете новый экземпляр MKAsynImageDownloader
и выполняете селектор на этом экземпляре, а не на экземпляре loader
, который находится в вашем RootController. Вы, вероятно, хотите, чтобы MKOperation
взял объект MKAsyncImageDownloader
во время его инициализации.
EDIT:
Это «загрузчик», о котором я говорю. В начале вашей MKOperation
if (image) {
NSDictionary *dict = [[NSDictionary alloc] initWithObjects:[NSArray arrayWithObjects:image, self.targetURL, nil] forKeys:[NSArray arrayWithObjects:@"image", @"url", nil]];
-->> MKAsyncImageDownloader *downloader = [[MKAsyncImageDownloader alloc] init];
[downloader performSelectorOnMainThread:@selector(imageAtURLHasDownloaded:) withObject:dict waitUntilDone:YES];
[dict release];
[downloader release];
}
Это отдельный экземпляр от того, который находится в вашем RootViewController, у этого нет набора делегатов. Это тот, над которым вы работаете, поэтому он пытается уведомить делегата ... но, опять же, у него нет набора делегатов.