'NSInvalidArgumentException',原因:' - [UIImage length]:无法识别的选择器发送到实例0x1d53b6b0'

时间:2013-04-02 10:27:13

标签: ios objective-c arrays nsarray overlay

我在相机覆盖图上有一系列图像。当我点击按钮时,我需要使用摄像机视图拍摄一个叠加图像的快照。但是当我在设备中启动时出现了以下错误。我搜索了一些我无法回答的现有代码。

错误:

[UIImage length]: unrecognized selector sent to instance 0x1d53b6b0 2013-04-02 11:27:18.748 
    ARimage[1166:907] *** Terminating app due to uncaught exception 
    'NSInvalidArgumentException', reason: '-[UIImage length]: unrecognized selector sent to instance 0x1d53b6b0'

数组叠加图像的代码:

    NSArray *arrayOfImageFiles=[[NSArray alloc]initWithObjects:[UIImage imageNamed:@"img1.png"],
[UIImage imageNamed:@"img2.png"],
[UIImage imageNamed:@"img3.png"],
[UIImage imageNamed:@"img4.png"],
[UIImage imageNamed:@"img5.png"], nil];//array of images.

     for(NSString * imageFileName in arrayOfImageFiles)//here you are getting string format but imageFileName is an image object
          {
    UIImage * overlay = [UIImage imageNamed: imageFileName];//here imageFileName is image simply give here  UIImage * overlay=imageFileName;
    if(overlay)
        {

       CGSize overlaySize = [overlay size];                                                                    

       [overlay drawInRect:CGRectMake(30 * xScaleFactor, 100 * yScaleFactor, overlaySize.width * xScaleFactor, overlaySize.height * yScaleFactor)];                                                                  
        } else {                                                                                                                                      
         NSLog( @"could not find an image named %@", imageFileName);   

           }
          }                                                             
        UIImage *combinedImage = UIGraphicsGetImageFromCurrentImageContext();                          
         [self setStillImage:combinedImage];                                                           
           UIGraphicsEndImageContext();                                                     
             [[NSNotificationCenter defaultCenter] postNotificationName:kImageCapturedSuccessfully object:nil];                                    

       }];                                                 
        }                          

捕获叠加图像以点击按钮:

 - (void)ButtonPressed {

    [self captureStillImageWithOverlay:[NSArray arrayWithObjects:[UIImage imageNamed:@"img1.png"],
[UIImage imageNamed:@"img2.png"],
[UIImage imageNamed:@"img3.png"],
[UIImage imageNamed:@"img4.png"],
[UIImage imageNamed:@"img5.png"], nil]];                                                          

         }   

图像显示在相机叠加视图中。当我单击按钮捕获叠加图像时,我收到错误。

2 个答案:

答案 0 :(得分:0)

尝试这样,

 NSArray *arrayOfImageFiles=[[NSArray alloc]initWithObjects:[UIImage imageNamed:@"img1.png"],
[UIImage imageNamed:@"img2.png"],
[UIImage imageNamed:@"img3.png"],
[UIImage imageNamed:@"img4.png"],
[UIImage imageNamed:@"img5.png"], nil];//array of images.

     for(NSString * imageFileName in arrayOfImageFiles)//here you are getting string format but imageFileName is an image object
          {
      UIImage * overlay=(UIImage *)imageFileName;
    if(overlay)
        {

       CGSize overlaySize = [overlay size];                                                                    

       [overlay drawInRect:CGRectMake(30 * xScaleFactor, 100 * yScaleFactor, overlaySize.width * xScaleFactor, overlaySize.height * yScaleFactor)];                                                                  
        } else {                                                                                                                                      
         NSLog( @"could not find an image named %@", imageFileName);   

           }
          }                                                             
        UIImage *combinedImage = UIGraphicsGetImageFromCurrentImageContext();                          
         [self setStillImage:combinedImage];                                                           
           UIGraphicsEndImageContext();                                                     
             [[NSNotificationCenter defaultCenter] postNotificationName:kImageCapturedSuccessfully object:nil];                                    

       }];                                                 
        }

答案 1 :(得分:0)

for声明:

for(NSString * imageFileName in arrayOfImageFiles)

毫无意义。 arrayOfImageFiles中的对象是UIImage的实例,而不是NSString。在这一行

   UIImage * overlay = [UIImage imageNamed: imageFileName];

您将UIImage作为字符串参数传递,该参数永远不会起作用。

我认为您需要将代码更改为这样(使用新的数组初始化语法):

NSArray *arrayOfImageFileNames = @[@"img1.png", @"img2.png", @"img3.png", @"img4.png", @"img5.png"];

for (NSString* imageFileName in arrayOfImageFileNames)
{  
    // The rest as per your code
}