Не совсем правильный способ использования делегата.Попробуйте это: В ImageViewController.h
:
@property(nonatomic,strong) NSURL *imageURL;
В ImageViewController.m
@synthesize imageURL;
Удалить imageListTableViewController
Изменить viewDidLoad
:
- (void)viewDidLoad
{
[super viewDidLoad];
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
self.image = [UIImage imageWithData:imageData];
}
Добавить в viewDidUnload
:
[self setImageURL:nil];
Затем в вашем ImageListTableViewController.m
: Изменить prepareForSegue
:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"Show Image"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
NSDictionary *imageDict = [self.imageArray objectAtIndex:indexPath.row];
NSURL *imageURL = [FlickrFetcher urlForPhoto:imageDict format:FlickrPhotoFormatLarge];
// Set the property on our Dest VC
ImageViewController *ivc = segue.destinationViewController;
ivc.imageURL = imageURL;
}
}
Изменить didSelectRowAtIndexPath
:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self performSegueWithIdentifier:@"Show Image" sender:nil];
}
Убедитесь, что вы подключили этот Segue к самому VC, а не к TableView.Если вы этого не сделаете, Segue будет уволен раньше, чем didSelectRowAtIndexPath
.В этом случае это не будет иметь значения, но для реального контроля - приобретите привычку подключаться к VC и вызывать executeSegue при необходимости.