1

每次我尝试在应用程序中打开图像时,都会出现以下错误:

: ImageIO: PNG 无效的 PNG 文件:iDOT 没有指向有效的 IDAT 块

: ImageIO: PNG 无效的 PNG 文件:iDOT 没有指向有效的 IDAT 块

: ImageIO: PNG 无效的 PNG 文件:iDOT 没有指向有效的 IDAT 块

这是我的头文件:

#import <UIKit/UIKit.h>
#import <Parse/Parse.h>
#import <dispatch/dispatch.h>


@interface ImageViewController : UIViewController<NSURLConnectionDataDelegate>{
    dispatch_queue_t background;
}

@property (nonatomic,strong) PFObject *message;
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (nonatomic,strong) NSMutableData *imageData;
@property (nonatomic,strong) NSURLConnection *connection;
- (IBAction)save:(id)sender;

@end

这是实现:

#import "ImageViewController.h"

@interface ImageViewController ()

@end

@implementation ImageViewController



- (void)viewDidLoad
{
    NSLog(@"ImageViewController starts here");
    [super viewDidLoad];
    
        PFFile *imageFile = [self.message objectForKey:@"imageFile"];
        NSURL *imageURL = [[NSURL alloc]initWithString:imageFile.url];
    NSMutableURLRequest *request =[[NSMutableURLRequest alloc]initWithURL:imageURL];
    self.connection = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:NO];
    [self.connection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
    [self.connection start];
    
}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    if (self.imageData == nil){
        self.imageData = [[NSMutableData alloc]init];
        [self.imageData appendData:data];
    }
    
    
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    self.imageView.image = [UIImage imageWithData:self.imageData];
    
}

@end
4

1 回答 1

5

您现在实际上并没有将任何内容附加到 imageData 对象的初始块中,因此损坏了 PNG。

改变这个

if (self.imageData == nil){
    self.imageData = [[NSMutableData alloc]init];
    [self.imageData appendData:data];
}

对此

if (self.imageData == nil){
    self.imageData = [[NSMutableData alloc]init];
}
[self.imageData appendData:data]; // <-- moved outside conditional
于 2014-05-23T21:42:28.053 回答