0
votes

This is another of those "I'm sure there's an easy answer to this" questions, but I find myself baffled.

I'm using the split view controller from the template. I'm successfully passing a NSString to the _detailItem variable, but am unable to use it to create and load an image into an UIImageView (named "stripImage").

It works up until: [self.stripImage setImage:[UIImage imageNamed: _detailItem]];

If I put a string literal into the same line of code (like @"image20.jpg"), it works fine.

- (void)configureView
{
// Update the user interface for the detail item.

if (self.detailItem) {
    NSLog(@"_detailItem is still: %@",_detailItem);
  // correctly reports the name of the imagefile (for example: "image20.jpg"

    [self.stripImage setImage:[UIImage imageNamed: _detailItem]];

    NSLog(@"The image being shown is: %@",self.stripImage.image);
      //returns "The image being shown is: (null)"
}
}

Please help keep my head from exploding. Thanks in advance.

... and I've tried it this way:

(in my Master view controller):

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Selected row %i",[indexPath row]);
NSString *imageName = [[stories objectAtIndex:[indexPath row]] objectForKey:@"link"];

NSLog(@"The image is: %@", imageName);

// These two work, oddly enough...

self.detailViewController.detailTitle.text = [[stories objectAtIndex:[indexPath row]]      
                 objectForKey:@"title"];
self.detailViewController.detailSubtitle.text = [[stories objectAtIndex:[indexPath row]] 
                 objectForKey:@"subtitle"];
// this one, not so much...
[self.detailViewController loadUpImageWith:imageName];
 }

and in my Detail view controller:

- (void)loadUpImageWith:(NSString *)what
{
NSString *path = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:[NSString 
                 stringWithFormat:@"strips/%@", what]];
NSLog(@"The file's url is: %@",path);

UIImage *img = [UIImage imageWithContentsOfFile:path];
NSLog(@"The resultant image is: %@",img);

stripImage.image = img;
}

But here's the weird thing... If I replace the variable ("what" in this case) with a string literal:

NSString *path = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:[NSString 
                 stringWithFormat:@"strips/%@", @"grumbles300.jpg"]];

... it works, displaying that one image. But I want to be able to use a variable there!!

Help me Obiwan Kenobi! You're my only hope.

1
Are you using ARC (Automatic Reference Counting)?Andreas Ley

1 Answers

0
votes

Embarrassing operator error.

I was adding a buncha images to the bundle, but it apparently kept track of the folder that contained them, which needed to be added to the file name. I thought UIImage imageNamed: would track down the images, as long as they were contained in the main bundle. Apparently not.

Perhaps this would be useful to someone who's experiencing the same sort of brain fart.

After resolving this, it was easy to do this:

- (void)loadupDetailTitle:(NSString *)title 
                 subtitle:(NSString *)subtitle 
                    image:(NSString *)imageName
{
NSString *path = [@"strips/" stringByAppendingPathComponent:imageName];
stripImage.image = [UIImage imageNamed:path];
detailTitle.text = title;
detailSubtitle.text = subtitle;
}