I am building a class that handles NSURLConnection requests. To allow other classes to use this class, I would like to allow the main class to call a delegate when connectionDidFinishLoading is fired.
I’ve looked through lots of documentation, but I can’t find anything that gives any clear examples, and the code that I have doesn’t call the delegate for some reason. The code I have so far is (code not relevant removed):
Interface:
@interface PDUrlHandler : NSObject { id delegate; } - (void)searchForItemNamed:(NSString *)searchQuery; @property (nonatomic, assign) id delegate; @end @interface NSObject (PDUrlHandlerDelegate) - (void)urlHandler:(PDUrlhandler*)urlHandler searchResultsFinishedLoading:(NSDictionary *)resultData; @end
Implementation:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@'Fininshed Loading...'); resultData = [self parseJSON:jsonData]; if(delegate && [delegate respondsToSelector:@selector(urlHandler:searchResultsFinishedLoading:)]) { NSLog(@'Delegating!'); [delegate urlHandler:self searchResultsFinishedLoading:resultData]; } else { NSLog(@'Not Delegating. I dont know why.'); } }
The delegate within the other class:
- (void)urlHandler:(PDUrlhandler*)urlHandler searchResultsFinishedLoading:(NSDictionary *)resultData; { NSLog(@'Delegating!!!!'); }
Turns out I forgot to set the delegate:
needed to go after the line that makes the initial call to the PDUrlHandler.