试图显示图像数组,代码将iphone返回主屏幕

时间:2011-05-07 21:28:58

标签: iphone objective-c arrays image ios

以下是问题代码:

代码是显示一组图像,然后可以滚动浏览。

- (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;
}

有什么想法吗?

  

[会议于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   长度]:发送到的无法识别的选择器   实例0x4b20f60 2011-05-07   22:47:19.797阿尔法[1171:207] *   由于未被捕获而终止应用程序   例外   'NSInvalidArgumentException',原因:   ' - [UIImage长度]:无法识别   选择器发送到实例0x4b20f60'   * 在第一次投掷时调用堆栈:(0 CoreFoundation
  0x00dca5a9 exceptionPreprocess + 185     1 libobjc.A.dylib
  0x00f1e313 objc_exception_throw + 44     2 CoreFoundation
  0x00dcc0bb - [NSObject(NSObject)   doesNotRecognizeSelector:] + 187 3
  的CoreFoundation
  0x00d3b966 __ 转发
+ 966 4
  的CoreFoundation
  0x00d3b522 _CF_forwarding_prep_0 + 50     5 UIKit
  0x003e3568 _UIImageAtPath + 36 6
  ALPHA
  0x000037fd - [PhotosView viewDidLoad] +   597 7 UIKit
  0x0036a089 - [UIViewController视图] +   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(内部)   _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图形服务
  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开始+ 53)

在抛出'NSException'实例后终止调用

再次感谢,

杰克

4 个答案:

答案 0 :(得分:8)

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

这是你的问题。您有NSStringUIImage名称相同的内容。当您将NSString重新声明为UIImage时,您会混淆forin循环。循环似乎仍然认为你有一个NSString,而实际上你有一个UIImage。因此,我们的第一步是尝试使用此代码替换该代码:

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

但是,该代码也不起作用。幸运的是,您的images数组已存储UIImages,因此您根本不需要NSString!因此,您可以用以下方法替换循环的前三行:

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

就是这样!您根本不需要UIImage *image = ...行,因为它是在括号中创建的。

希望这有帮助!

答案 1 :(得分:1)

photos中,您已经存储了UIImage对象。为什么要从UIImage尝试循环循环克里特UIImage

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

你应该这样做:

UIImage *image = [photos objectAtIndex:i];

答案 2 :(得分:0)

照片是UIImages的NSArray是的,你把它列为字符串?

for ( NSString *image in photos ) 

应该是:

for ( UIImage *image in photos )
    {
        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];
    }

答案 3 :(得分:0)

for ( UIImage *img in photos ){

UIImageView *imageView = [[UIImageView alloc] initWithImage:img];

...... // write something

}