Итак, наконец, я сделал это с делегатом.
В своем классе абстракции (* .h) я определил следующее, в противном случае вы получите
предупреждение: нет метода -setDarkness:найдено
предупреждение: (Будут приняты сообщения без соответствующей сигнатуры метода
предупреждение: вернуть 'id' и принять '...' в качестве аргументов.)
@protocol RssParserDelegate <NSObject>
- (void)displayResults:(NSDictionary *)parserResults;
@end
Чем я объявил переменную экземпляра и некоторые методы в своем классе абстракции (* .h):
id _delegate;
// ...
- (id)delegate;
- (void)setDelegate:(id)new_delegate;
Поэтому объявление выглядит так (* .m):
- (id)delegate {
return _delegate;
}
- (void)setDelegate:(id)new_delegate {
_delegate = new_delegate;
}
Чтобы передать результат, вы должны поместить следующий код в requestFailed и requestFinished:
if ([_delegate respondsToSelector:@selector(displayResults:)])
[_delegate displayResults:results];
else
{
[NSException raise:NSInternalInconsistencyException
format:@"Delegate doesn't respond to displayResults:"];
}
Я переопределил sendRequest и установил входящий делегат в моей переменной экземпляра:
- (void)sendRequest:(NSString *)url withDelegate:(id)aDelegate {
// set delegate to populate the results later
[self setDelegate:aDelegate];
По вашему мнениюконтроллер объявляет этот метод:
- (void)displayResults:(NSDictionary *)results {
// do some data processing
...
// show data
[self.tableView reloadData];
}
И я также изменил вызов метода на sendRequest моего класса абстракции:
[yourRequest sendRequest:@"xxx" withDelegate:self];