-
20-09-2011, 11:35 AM #1Banned
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Hiển thị ảnh lên UIScrollview lỗi: Terminating app due to uncaught exception ... was mutated while being enumerated?
Chương trình mình viết để hiển thị ảnh lên UIScrollview. kiểu gallery image.
Lỗi crash trong lúc mình load ảnh (phần lớn load không sao thỉnh thoảng mới bắn ra lỗi.)
*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <CALayerArray: 0x4e68720> was mutated while being enumerated.(
mỗi khi nhận được thông tin ảnh + link ảnh mình lưu vào 1 object sau đó add vào 1 NSMutableArray.
sau đó trong hàm hiển thị ảnh mình xác định vị trí ảnh hiển thị trong uiscrollview sau đó Add 1 uiimageview vào vị trí đó. Với mỗi ảnh mình tạo 1 thread để load ảnh đó :
Mã:NSThread *thread_ = [NSThread alloc]; [thread_ initWithTarget:self selector:@selector(DisplayAImage:) object: ip]; // ip là đối tượng chứa thông tin ảnh [threads addObject:thread_]; [thread_ start]; [thread_ release];
Mã:- (void) DisplayAImage:(ImagePosition *)ip{ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; ImagePosition *newIp = [ip copy]; UIImage *image; NSData *data; NSFileManager *fileManager = [NSFileManager defaultManager]; if(![fileManager fileExistsAtPath:[self PathOfFile:newIp.imageID]]) { NSURL *url = [[NSURL alloc] initWithString:newIp.imageUrl]; [[NSURLCache sharedURLCache] setMemoryCapacity:0]; [[NSURLCache sharedURLCache] setDiskCapacity:0]; data = [[NSData alloc] initWithContentsOfURL:url]; [url release]; [data writeToFile:[self PathOfFile:newIp.imageID] atomically:YES]; }else{ data = [[NSData alloc] initWithContentsOfFile:[self PathOfFile:newIp.imageID]]; NSLog(@"Cache . . . . . . . "); } image = [[UIImage alloc] initWithData:data]; [data release]; UIImageView *image1 = (UIImageView*)[myScrollView viewWithTag:newIp.imageID]; [image1 setImage:image]; [image release]; [pool release];}
*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <CALayerArray: 0x4e68720> was mutated while being enumerated.(
"<CALayer: 0x4e686f0>",
"<CALayer: 0x4b5d490>",
"<CALayer: 0x4b8a220>",
"<CALayer: 0x4b16df0>",
"<CALayer: 0x4e65250>",
"<CALayer: 0x4e4c7e0>",
"<CALayer: 0x4e33590>",
"<CALayer: 0x4b99430>",
"<CALayer: 0x4bac290>",
"<CALayer: 0x4b385d0>",
"<CALayer: 0x4b6b4b0>",
"<CALayer: 0x4e73220>",
"<CALayer: 0x4e39600>",
"<CALayer: 0x4b93cf0>",
"<CALayer: 0x4b6c000>",
"<CALayer: 0x4e708e0>",
"<CALayer: 0x4e40430>",
"<CALayer: 0x4b38e30>",
"<CALayer: 0x4e67b00>",
"<CALayer: 0x4e53b20>",
"<CALayer: 0x4e71690>",
"<CALayer: 0x4b6c910>",
"<CALayer: 0x4b96170>",
"<CALayer: 0x4ba46e0>",
"<CALayer: 0x4e43010>",
"<CALayer: 0x4e41550>",
"<CALayer: 0x4b992b0>",
"<CALayer: 0x4b5f2e0>",
"<CALayer: 0x4b98440>",
"<CALayer: 0x4e68580>",
"<CALayer: 0x4b90ab0>",
"<CALayer: 0x4b33ca0>",
"<CALayer: 0x4b87090>",
"<CALayer: 0x4babf20>",
"<CALayer: 0x4b69b20>",
"<CALayer: 0x4e67380>",
"<CALayer: 0x4e38a30>",
"<CALayer: 0x4b18040>",
"<CALayer: 0x4b82d70>",
"<CALayer: 0x4b34140>",
"<CALayer: 0x4e62fd0>",
"<CALayer: 0x4b670a0>",
"<CALayer: 0x4b9abb0>",
"<CALayer: 0x4e48640>",
"<CALayer: 0x4e6ad20>",
"<CALayer: 0x4b311e0>",
"<CALayer: 0x4b61470>",
"<CALayer: 0x4e74340>",
"<CALayer: 0x4b9a390>",
"<CALayer: 0x4b8c9e0>",
"<CALayer: 0x4e487c0>",
"<CALayer: 0x4b301c0>",
"<CALayer: 0x4b86d80>",
"<CALayer: 0x4e6c440>",
"<CALayer: 0x4b8e840>",
"<CALayer: 0x4b60d40>",
"<CALayer: 0x4e65020>",
"<CALayer: 0x4e3d960>",
"<CALayer: 0x4e50060>",
"<CALayer: 0x4e6cdb0>",
"<CALayer: 0x4b38360>",
"<CALayer: 0x4e38710>",
"<CALayer: 0x4e4bc60>",
"<CALayer: 0x4b96340>",
"<CALayer: 0x4bb1440>",
"<CALayer: 0x4e5d130>",
"<CALayer: 0x4e61bb0>",
"<CALayer: 0x4b60270>",
"<CALayer: 0x4b378a0>",
"<CALayer: 0x4b7c010>",
"<CALayer: 0x4e3b280>",
"<CALayer: 0x4e464f0>",
"<CALayer: 0x4e467e0>",
"<CALayer: 0x4e5fe60>",
"<CALayer: 0x4b7ba80>",
"<CALayer: 0x4b3c490>",
"<CALayer: 0x4b99640>",
"<CALayer: 0x4e43e10>",
"<CALayer: 0x4e5d840>",
"<CALayer: 0x4bb2110>",
"<CALayer: 0x4e38cc0>",
"<CALayer: 0x4b7e6f0>",
"<CALayer: 0x4e5dce0>",
"<CALayer: 0x4b3be20>",
"<CALayer: 0x4e6fe20>",
"<CALayer: 0x4e5a4f0>",
"<CALayer: 0x4e6d010>",
"<CALayer: 0x4e6d160>",
"<CALayer: 0x4e606d0>",
"<CALayer: 0x4e703b0>",
"<CALayer: 0x4e5a580>",
"<CALayer: 0x4b31db0>",
"<CALayer: 0x4b74ea0>",
"<CALayer: 0x4b853c0>",
"<CALayer: 0x4b98d20>",
"<CALayer: 0x4b8bc80>",
"<CALayer: 0x4b96ed0>",
"<CALayer: 0x4b962b0>",
"<CALayer: 0x4e5ac10>",
"<CALayer: 0x4e717e0>",
"<CALayer: 0x4b7a7a0>",
"<CALayer: 0x4e41030>",
"<CALayer: 0x4e4aef0>",
"<CALayer: 0x4e3efe0>",
"<CALayer: 0x4b7f1f0>",
"<CALayer: 0x4e6f050>",
"<CALayer: 0x4e4d5d0>",
"<CALayer: 0x4b82a30>",
"<CALayer: 0x4b77910>",
"<CALayer: 0x4b6adf0>",
"<CALayer: 0x4e46c60>",
"<CALayer: 0x4e5cae0>",
"<CALayer: 0x4b81ac0>",
"<CALayer: 0x4b83150>",
"<CALayer: 0x4b43bb0>",
"<CALayer: 0x4b7a320>",
"<CALayer: 0x4e61e90>",
"<CALayer: 0x4e6b4e0>",
"<CALayer: 0x4e61ef0>"
)'
*** Call stack at first throw:
(
0 CoreFoundation 0x00f405a9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x01094313 objc_exception_throw + 44
2 CoreFoundation 0x00f40069 __NSFastEnumerationMutationHandler + 377
3 UIKit 0x001cc26e -[UIView(Hierarchy) viewWithTag:] + 219
4 MyApp 0x0000481a -[MyAppViewController DisplayAImage:] + 1210
5 Foundation 0x00904cf4 -[NSThread main] + 81
6 Foundation 0x00904c80 __NSThread__main__ + 1387
7 libSystem.B.dylib 0x9043e259 _pthread_start + 345
8 libSystem.B.dylib 0x9043e0de thread_start + 34
)
terminate called after throwing an instance of 'NSException'
Ai đã từng gặp vấn đề này help với [IMG]images/smilies/Cry.gif[/IMG]
Thanks and Best Regards.View more random threads:
- Làm sao lưu ảnh download từ internet vào cache
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; nghĩa là gì???
- Có mấy cách import Framework khi làm việc với Xcode?
- các bác check giúp e với. cảm ơn cả nhà ạ
- So sánh điểm giống và khác nhau giữa Objective c và c/c++
- UITabbarcontroller scroll, có thể cho phép UITabbarcontroller kéo đi được không?
- Làm sao để tạo 1 chương trình kết nối Client Server đơn giản
- Lập trình Objectice C - Cùng trao đổi kinh nghiệm về lập trình IOS
- anh chị giúp e với! Quicksort
- [Core Data]Cách lấy data cho vào Cell của UITableView?
-
21-09-2011, 04:38 PM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Mình cũng mới bắt đầu tìm hiểu về Obj C , hôm cũng có làm 1 cái sample về UIscrollView , nhưng mình làm theo video hương giẫn [IMG]images/smilies/biggrin.png[/IMG] . Ko thấy lỗi , nếu vẫn ko sửa đc thì bạn có thể search các video tutorial xem sao .
Chứ nói thế này + mình cũng mới lọ mọ Obj C nên chỉ dám góp ý tý thui [IMG]images/smilies/biggrin.png[/IMG].
Chúc bạn thành công [IMG]images/smilies/smile.png[/IMG] .
-
21-09-2011, 05:39 PM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Search hoài cũng được cái này :
You must not try to modify the UI on a separate thread. UI should only be manipulated on the main thread.
Instead of detaching a new thread, you should use performSelectorOnMainThread:withObject:waitUntilDo ne:. This will ensure that the method will be called on the proper thread.
Tuy nhiên chương trình hoạt động không được mượt như trước
-
21-09-2011, 06:53 PM #4Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi ngocsonaat
Thông qua phân tích dữ liệu Google từ 86 quốc gia, mới đây, một công ty tại Anh đã công bố bảng xếp hạng kích tấc "cậu nhỏ" của các nước trên thế giới. Kết quả, hầu hết các nước xếp ở nhóm đầu của...
"Chim" của chàng trai Việt thuộc...