Trying to display array of images, code returns iphone to home screen

18,588

Solution 1

for ( NSString *image in photos )
{
    UIImage *image = [UIImage imageNamed:[photos objectAtIndex:i]];
    ...

This is your problem. You have an NSString and a UIImage named the same thing. When you redeclare your NSString as a UIImage, you are confusing your the forin loop. The loop seems to still think that you have an NSString, when in reality, you have a UIImage. So our first step is to try replacing that code with this code instead:

for ( NSString *imageName in photos )
{
    UIImage *image = [UIImage imageNamed:imageName];
    ...

However, that code won't work either. Fortunately, your images array already stores UIImages, so your don't need an NSString at all! Thus you can replace the first three lines of your loop with this:

for ( UIImage *image in photos )
{
    ...

That's it! You don't need your UIImage *image = ... line at all since it's created in the parentheses.

Hope this helps!

Solution 2

In photos you already store UIImage objects. Why you trying in cycle loop crete UIImage from UIImage?

UIImage *image = [UIImage imageNamed:[photos objectAtIndex:i]];

You should do like this:

UIImage *image = [photos objectAtIndex:i];
Share:
18,588
Jack Nutkins
Author by

Jack Nutkins

I live and work in the South-East of England as a Power Platform Consultant.

Updated on June 26, 2022

Comments

  • Jack Nutkins
    Jack Nutkins almost 2 years

    Here is the problem code:

    The code is to display an array of images which can then be scrolled through.

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        NSArray *photos = [[NSArray arrayWithObjects:   
                            [UIImage imageNamed:@"Event.png"],
                            [UIImage imageNamed:@"Logo.png"],
                            [UIImage imageNamed:@"default.png"],
                            [UIImage imageNamed:@"LittleLogoImage.png"],
                            nil] retain];      // TODO – fill with your photos
    
        // note that the view contains a UIScrollView in aScrollView
    
        int i=0;
        int width = 0;
        int height = 0;
        for ( NSString *image in photos )
        {
            UIImage *image = [UIImage imageNamed:[photos objectAtIndex:i]];
            UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
            imageView.contentMode = UIViewContentModeScaleAspectFit;
            imageView.clipsToBounds = YES;
    
            imageView.frame = CGRectMake( imageView.frame.size.width * i++, 0, imageView.frame.size.width, imageView.frame.size.height);
    
            [aScrollView addSubview:imageView];
            width = imageView.frame.size.width;
            height = imageView.frame.size.height;
    
            [imageView release];
        }
        aScrollView.contentSize = CGSizeMake(width*i, height);
        aScrollView.delegate = self;
    }
    

    Any ideas?

    [Session started at 2011-05-07 22:46:47 +0100.] 2011-05-07 22:46:49.314 ALPHA[1171:207] load01 2011-05-07 22:47:13.749 ALPHA[1171:207] 2 2011-05-07 22:47:13.751 ALPHA[1171:207] dealloc01 2011-05-07 22:47:13.755 ALPHA[1171:207] load02 2011-05-07 22:47:19.791 ALPHA[1171:207] 4 2011-05-07 22:47:19.792 ALPHA[1171:207] dealloc02 2011-05-07 22:47:19.795 ALPHA[1171:207] -[UIImage length]: unrecognized selector sent to instance 0x4b20f60 2011-05-07 22:47:19.797 ALPHA[1171:207] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImage length]: unrecognized selector sent to instance 0x4b20f60' * Call stack at first throw: ( 0 CoreFoundation
    0x00dca5a9 exceptionPreprocess + 185 1 libobjc.A.dylib
    0x00f1e313 objc_exception_throw + 44 2 CoreFoundation
    0x00dcc0bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187 3
    CoreFoundation
    0x00d3b966 __forwarding
    + 966 4
    CoreFoundation
    0x00d3b522 _CF_forwarding_prep_0 + 50 5 UIKit
    0x003e3568 _UIImageAtPath + 36 6
    ALPHA
    0x000037fd -[PhotosView viewDidLoad] + 597 7 UIKit
    0x0036a089 -[UIViewController view] + 179 8 ALPHA
    0x00002af3 -[ALPHAViewController displayView:] + 500 9 ALPHA
    0x00002707 -[ALPHAAppDelegate displayView:] + 60 10 ALPHA
    0x00002cdd -[View2 viewPhotos:] + 99 11 UIKit
    0x002ba4fd -[UIApplication sendAction:to:from:forEvent:] + 119 12 UIKit
    0x0034a799 -[UIControl sendAction:to:forEvent:] + 67 13 UIKit
    0x0034cc2b -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527 14 UIKit
    0x0034b7d8 -[UIControl touchesEnded:withEvent:] + 458 15 UIKit
    0x002deded -[UIWindow _sendTouchesForEvent:] + 567 16 UIKit
    0x002bfc37 -[UIApplication sendEvent:] + 447 17 UIKit 0x002c4f2e _UIApplicationHandleEvent + 7576 18 GraphicsServices
    0x01722992 PurpleEventCallback + 1550 19 CoreFoundation
    0x00dab944 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION + 52 20 CoreFoundation 0x00d0bcf7 __CFRunLoopDoSource1 + 215 21 CoreFoundation
    0x00d08f83 __CFRunLoopRun + 979 22 CoreFoundation
    0x00d08840 CFRunLoopRunSpecific + 208 23 CoreFoundation
    0x00d08761 CFRunLoopRunInMode + 97 24 GraphicsServices
    0x017211c4 GSEventRunModal + 217 25 GraphicsServices
    0x01721289 GSEventRun + 115 26 UIKit 0x002c8c93 UIApplicationMain + 1160 27 ALPHA
    0x000026a8 main + 102 28 ALPHA
    0x00002639 start + 53 )

    terminate called after throwing an instance of 'NSException'

    Thanks again,

    Jack