【问题标题】:UIImage (from path) to NSData causes crashUIImage(从路径)到 NSData 导致崩溃
【发布时间】:2015-11-17 11:39:56
【问题描述】:

我有以下代码

for (int i=0; i<self.imageArray.count; i++) 
{
    [self.operation addData:[self getDataFromImage:[self.imageArray objectAtIndex:i]] 
    forKey:[NSString stringWithFormat:@"pa_image%d",i+1] 
    mimeType:@"image/png" 
    fileName:[NSString stringWithFormat:@"pa_image%d.png",i+1]];

}

从这里调用以下方法

-(NSData *)getDataFromImage:(UIImage *)image
{
    NSData *imageData=  UIImageJPEGRepresentation(image, 0.1);
    return imageData;
}

我的 imageArray 代码中有两种情况

1) 值来自 imageArray 中的 API,例如“images/upload/d872f1.png”、“images/upload/0fdade.png”,然后在 NSData 中返回 nil。我想从此路径转换为 ​​NSData。怎么办?

执行此行后,我的应用程序崩溃了。它给了

由于未捕获的异常而终止应用 'NSInvalidArgumentException',原因:'-[__NSCFString CGImage]: 无法识别的选择器发送到实例 0x7f83a1f13510'

2) 当我从手机上传时,它就像“, {834, 1250}”。我的代码在这种情况下工作正常,它转换成 NSData。

更多细节在这里是我的 addData 方法

-(void) addData:(NSData*) data forKey:(NSString*) key mimeType:(NSString*) mimeType fileName:(NSString*) fileName 
 {

  if ([self.request.HTTPMethod isEqualToString:@"GET"]) 
  {
  [self.request setHTTPMethod:@"POST"];
 }

 NSDictionary *dict = @{@"data": data,
@"name": key,
@"mimetype": mimeType,
@"filename": fileName};

[self.dataToBePosted addObject:dict];
}

【问题讨论】:

  • 在你的 imageArray 中有 NSString 对象或 UIImage 对象吗?
  • UIimage 对象 - <__nsarraym>( images/upload/d872f1.png, images/upload/0fdade.png )
  • 我认为它的文件名。
  • 不,它不工作..!

标签: ios objective-c crash uiimage nsdata


【解决方案1】:
Try This

for (int i=0; i<self.imageArray.count; i++) 
{
    UIImage *image;
    if([[self.imageArray objectAtIndex:i] isKindOfClass:[NSString class]]){
     image = [UIImage imageNamed:[self.imageArray objectAtIndex:i]];
    }else{
     image = [self.imageArray objectAtIndex:i];
     }
    [self.operation addData:[self getDataFromImage:image] 
forKey:[NSString stringWithFormat:@"pa_image%d",i+1] 
mimeType:@"image/png" 
fileName:[NSString stringWithFormat:@"pa_image%d.png",i+1]];

} 

【讨论】:

  • 当 1) 值来自 imageArray 中的 API,例如“images/upload/d872f1.png”、“images/upload/0fdade.png”时,我的 imageArray 代码中有 2 个场景,然后是您的解决方案在 NSData 中返回 nil 2)当我从手机上传时,它就像“, {834, 1250}”然后你的解决方案也崩溃了。
  • image = [UIImage imageNamed:[self.imageArray objectAtIndex:i]];在这一行图像值给出空值。所以我更新了我的答案。谢谢你..!
【解决方案2】:
        if([[self.imageArray objectAtIndex:i] isKindOfClass:[NSString class]])
        {

            NSString *stringFromAPI = [self.imageArray objectAtIndex:i];

            NSURL *url=[NSURL URLWithString:stringFromAPI];

            image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];

        }else
        {
            image = [self.imageArray objectAtIndex:i];
        }
        [self.operation addData:[self getDataFromImage:image]
                         forKey:[NSString stringWithFormat:@"pa_image%d",i+1]
                       mimeType:@"image/png"
                       fileName:[NSString stringWithFormat:@"pa_image%d.png",i+1]];

【讨论】:

  • 如果我们直接使用 image = [UIImage imageNamed:[self.imageArray objectAtIndex:i]];由于直接从字符串转换为图像,它将给出 null,而不是我使用 NSString *stringFromAPI = [self.imageArray objectAtIndex:i]; NSURL *url=[NSURL URLWithString:stringFromAPI]; image = [UIImage imageWithData:[NSData dataWithContentsOfURL:url]];然后它对我有用。
【解决方案3】:

是的,用断点检查你的数组。它包含字符串而不是图像。

异常本身就是解释性的。

【讨论】:

    猜你喜欢
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多