gpt4 book ai didi

ios - 'NSGenericException',原因 : Collection <__NSArrayM: 0x7fabb400> was mutated while being enumerated

转载 作者:可可西里 更新时间:2023-11-01 04:13:45 28 4
gpt4 key购买 nike

在我的 iPhone 应用程序中,我正在尝试使用 uicollectionView 实现一个图片库。当 <20 张图像存储在图库中时它工作正常但是当我存储多个图像(大于 20 个)时应用程序崩溃。请帮助我。谢谢提前。

错误:

Terminating app due to uncaught exception 'NSGenericException', reason:          '*** Collection <__NSArrayM: 0x7fabb400> was mutated while being enumerated.'
*** First throw call stack:
(
0 CoreFoundation 0x042ea946 __exceptionPreprocess + 182
1 libobjc.A.dylib 0x03660a97 objc_exception_throw + 44
2 CoreFoundation 0x042ea1e6 __NSFastEnumerationMutationHandler + 166
3 CoreFoundation 0x041da052 -[NSArray containsObject:] + 178
4 AtSceneDebug 0x001ce9a9 -[GalleryCollectionViewController loadImageFromAppSupport:] + 201
5 AtSceneDebug 0x001c5de2 __73-[GalleryCollectionViewController collectionView:cellForItemAtIndexPath:]_block_invoke + 98
6 libdispatch.dylib 0x03cca30a _dispatch_call_block_and_release + 15
7 libdispatch.dylib 0x03ceae2f _dispatch_client_callout + 14
8 libdispatch.dylib 0x03cd310f _dispatch_root_queue_drain + 634
9 libdispatch.dylib 0x03cd487e _dispatch_worker_thread2 + 45
10 libsystem_pthread.dylib 0x04056dab _pthread_wqthread + 336
11 libsystem_pthread.dylib 0x0405acce start_wqthread + 30
)
libc++abi.dylib: terminating with uncaught exception of type NSException

代码:

GalleryCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"GalleryCollectionViewCellID" forIndexPath:indexPath];

if(indexPath.row==0)
{
Photo *photo=[self.photoSource.photos objectAtIndex:indexPath.row];
cell.selectionImageView.hidden=YES;
[cell.galleryImageView setImage:[UIImage imageNamed:[photo.mURLLarge lastPathComponent]]];
return cell;
}

Photo *photo=[self.photoSource.photos objectAtIndex:indexPath.row];

if(self.mItemType==ITEM_TYPE_PHOTO)

{
NSLog(@"index of coll.......%d",indexPath.row);
UIImage *image = [_imageCache objectForKey:photo.mURLThumb];
if(image)
{
//[cell.galleryImageView setImage:[self loadImageFromAppSupport:photo.mURLLarge]];
[cell.galleryImageView setImage:image];

}
else
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIImage *image = [self loadImageFromAppSupport:photo.mURLThumb];
if(image)
{
dispatch_async(dispatch_get_main_queue(), ^{
GalleryCollectionViewCell *cell =(GalleryCollectionViewCell*)[self.collectionView cellForItemAtIndexPath:indexPath];
if(cell)
{
cell.galleryImageView.image = image;
}
});

[_imageCache setObject:image forKey:photo.mURLThumb];
}
});

}
}

else

{
[cell.galleryImageView setImage:[self loadImageFromAppSupport:photo.mURLThumb]];

}

if(indexPath.row==0)
{
cell.selectionImageView.hidden=YES;
}
else if(self.isEditing && photo.isMarkedForDeletion && indexPath.row!=0)
{
cell.selectionImageView.hidden=NO;
[cell.selectionImageView setImage:[UIImage imageNamed:@"red_led"]];
}
else if (self.isEditing && !photo.isMarkedForDeletion && indexPath.row!=0)
{
//[cell.selectionImageView setImage:[UIImage imageNamed:@"green_led"]];
cell.selectionImageView.hidden=YES;
}
else if(!self.isEditing && photo.isMarkedForDeletion && indexPath.row!=0)
{
cell.selectionImageView.hidden=YES;
}
else if(!self.isEditing && !photo.isMarkedForDeletion && indexPath.row!=0)
{
cell.selectionImageView.hidden=YES;
}

if (!self.isEditing)
{
CGFloat xx=cell.frame.origin.x;
CGFloat yy=cell.frame.origin.y;

CGRect frame = cell.frame;
frame.origin.x = 500; // new x coordinate
frame.origin.y = 0; // new y coordinate
cell.frame = frame;

[UIView animateWithDuration:0.0 animations:^{

CGRect frame = cell.frame;
frame.origin.x = xx; // new x coordinate
frame.origin.y = yy; // new y coordinate
cell.frame = frame;
}];

}
cell.layer.shouldRasterize = YES;
cell.layer.rasterizationScale = [UIScreen mainScreen].scale;
return cell;

最佳答案

当您在 2 个不同的线程/队列上使用 NSMutable 并且一个正在枚举一个而另一个正在从中添加/删除元素时,通常会抛出此错误。你不应该在多线程环境中使用 NSMutableObject。您的来电:

[_imageCache setObject:image forKey:photo.mURLThumb];

是失败的原因,您正在更改调度队列中的可变对象,同时在主线程中访问它。将此调用移至“if(cell)”部分上方(或 dispatch_get_main_queue block 中的任何其他位置)将解决此问题。

关于ios - 'NSGenericException',原因 : Collection <__NSArrayM: 0x7fabb400> was mutated while being enumerated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28107809/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com