0

该代码应该从选择器视图中选择图像的数据块并将其上传到网站,但每次我尝试上传特定块时,它都会给我一个 EXC_BAD_ACCESS。以下是拆分图像数据的代码大块

PrimaryImageController.h

@interface PrimaryImageViewController
{
    __weak IBOutlet UIImageView *imgView;
}
@property (nonatomic,strong)    NSMutableArray *chunkArray;


PrimaryImageController.m
@synthesize imgView,chunkArray;


- (void)viewDidLoad
{
chunkArray=[[NSMutableArray alloc]init];
}

-(void)updateImage
{
UIImage *img = imgView.image;    
NSData *dataObj=UIImageJPEGRepresentation(img, 1.0);
NSUInteger length = [dataObj length];    
NSUInteger chunkSize = 3072*10;
NSUInteger offset = 0;
int numberOfChunks=0;
do
{
    NSUInteger thisChunkSize = length - offset > chunkSize ? chunkSize : length - offset;
    NSData* chunk = [NSData dataWithBytesNoCopy:(char *)[dataObj bytes] + offset
                                         length:thisChunkSize
                                   freeWhenDone:NO];
    offset += thisChunkSize;        
    [chunkArray insertObject:chunk atIndex:numberOfChunks];        
    numberOfChunks++;        
}    
while (offset < length);
for (int i=0; i<[chunkArray count]; i++)
{
    [uploadPrimary uploadImage:[chunkArray objectAtIndex:i] uuid:uniqueIdString numberOfChunks:[chunkArray count] currentChunk:i];
}
}
4

1 回答 1

2

exc_bad_access表示严重崩溃,不多也不少。虽然过度释放对象通常会导致这种情况,但可能发生这种崩溃还有许多其他原因。同样,硬崩溃在NSException某种意义上也不例外。设置异常断点无济于事。

如果你有一个崩溃,你应该有一个回溯。发布崩溃的回溯。

如果您启用了 ARC,这看起来像是一个内部指针问题。您正在创建一堆对 中包含的数据的引用dataObj,但不再引用dataObj

尝试[dataObj self];在该for()循环之后添加。

但是,由于您将块存储在作为实例变量的数组中,因此dataObj应将其寿命与该数组的寿命相耦合。即要么将数组移动到updateImage方法中,要么将 iVar 声明为强引用dataObj

于 2013-03-14T17:51:58.057 回答