-
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:
- Các hàm và class tương ứng giữa Java và Objective-C?
- Cài đặt của cơ chế quản lý bộ nhớ với retain/release/autorelease
- các bác check giúp e với. cảm ơn cả nhà ạ
- Làm sao lưu ảnh download từ internet vào cache
- các pro chỉ em cách chèn file flash đuôi .swf và xcode với!
- IQ Widgets has a Gantt chart. You would need to generate bindings in order to use it in MonoTouch.
- Sử dụng file .PNG làm giao diện phần mềm
- Xài Storyboard nó có khác gì khi sử dụng file Xib không?
- [Thắc mắc] Cách sử dụng thư viện dựng sẵn igraph.h dành cho C++ trên VS 2013
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; nghĩa là gì???
-
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
Pallet nhựa Lâm Đồng giải pháp hoàn hảo cho nhà kho Pallet nhựa Lâm Đồng là một giải pháp đa năng và hiệu quả trong việc vận chuyển và lưu trữ hàng hóa. Trong đó, pallet nhựa Lâm Đồng không chỉ đáp...
Pallet nhựa Lâm Đồng giải pháp...