The following method was queued by default in the global queue to retrieve multiple photos from the device. if the system version is larger than iOS 8, the Photosframework is used , otherwise ALAssetLibrary.
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
dispatch_async(dispatch_get_global_queue(0, 0), ^{
[self getPhotos:^(NSArray *photos) {
dispatch_semaphore_signal(sema);
}];
}
dispatch_time_t timeout = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC));
dispatch_semaphore_wait(sema, timeout);
- (void)getPhotos:(MyCallBack)callback {
Class PHPhotoLibrary_class = NSClassFromString(@"PHPhotoLibrary");
if (PHPhotoLibrary_class) {
PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
if (status != PHAuthorizationStatusAuthorized)
{
return;
}
PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary options:nil];
}
}
If the application crashes on a 64-bit device, such as the iPhone 5S and newer, the stack trace looks like this.
Exception Type: SIGTRAP
Exception Codes: TRAP_BRKPT at 0x190c41b60
Crashed Thread: 25
Thread 25 Crashed:
0 PhotoLibraryServices 0x0000000190c41b60 +[PLModelMigrator _validateCurrentModelVersionFailedWithNoVersionFromServer] :444 (in PhotoLibraryServices)
1 PhotoLibraryServices 0x0000000190c41ef8 +[PLModelMigrator _validateCurrentModelVersionAttempt:] :316 (in PhotoLibraryServices)
2 PhotoLibraryServices 0x0000000190c41ef8 +[PLModelMigrator _validateCurrentModelVersionAttempt:] :316 (in PhotoLibraryServices)
3 PhotoLibraryServices 0x0000000190c41ef8 +[PLModelMigrator _validateCurrentModelVersionAttempt:] :316 (in PhotoLibraryServices)
4 PhotoLibraryServices 0x0000000190c41ef8 +[PLModelMigrator _validateCurrentModelVersionAttempt:] :316 (in PhotoLibraryServices)
5 PhotoLibraryServices 0x0000000190c41ef8 +[PLModelMigrator _validateCurrentModelVersionAttempt:] :316 (in PhotoLibraryServices)
6 PhotoLibraryServices 0x0000000190c41ef8 +[PLModelMigrator _validateCurrentModelVersionAttempt:] :316 (in PhotoLibraryServices)
7 PhotoLibraryServices 0x0000000190c41ef8 +[PLModelMigrator _validateCurrentModelVersionAttempt:] :316 (in PhotoLibraryServices)
8 PhotoLibraryServices 0x0000000190c41ef8 +[PLModelMigrator _validateCurrentModelVersionAttempt:] :316 (in PhotoLibraryServices)
9 PhotoLibraryServices 0x0000000190c41ef8 +[PLModelMigrator _validateCurrentModelVersionAttempt:] :316 (in PhotoLibraryServices)
10 PhotoLibraryServices 0x0000000190c41ef8 +[PLModelMigrator _validateCurrentModelVersionAttempt:] :316 (in PhotoLibraryServices)
11 PhotoLibraryServices 0x0000000190c43688 +[PLModelMigrator createDatabase] :508 (in PhotoLibraryServices)
12 PhotoLibraryServices 0x0000000190b7c1cc -[PLPhotoLibrary loadDatabase:] :808 (in PhotoLibraryServices)
13 PhotoLibraryServices 0x0000000190b71f70 -[PLPhotoLibrary initWithTransientContext:name:] :560 (in PhotoLibraryServices)
14 Photos 0x0000000191722418 ___45-[PHPhotoLibrary backgroundQueuePhotoLibrary]_block_invoke :60 (in Photos)
15 libdispatch.dylib 0x0000000184bb21bc __dispatch_client_callout :16 (in libdispatch.dylib)
16 libdispatch.dylib 0x0000000184bb2fb0 _dispatch_once_f :56 (in libdispatch.dylib)
17 Photos 0x00000001917223d4 -[PHPhotoLibrary backgroundQueuePhotoLibrary] :156 (in Photos)
18 Photos 0x0000000191722604 -[PHPhotoLibrary photoLibraryForCurrentQueueQoS] :80 (in Photos)
19 Photos 0x0000000191722578 -[PHPhotoLibrary managedObjectContextForCurrentQueueQoS] :24 (in Photos)
20 Photos 0x00000001917611bc -[PHQuery _createFetchRequestIncludingBasePredicate:] :140 (in Photos)
21 Photos 0x0000000191761c5c -[PHQuery fetchRequest] :52 (in Photos)
22 Photos 0x0000000191783988 -[PHFetchResult initWithQuery:oids:registerIfNeeded:usingManagedObjectContext:] :376 (in Photos)
23 Photos 0x0000000191783c2c -[PHFetchResult initWithQuery:] :100 (in Photos)
24 Photos 0x0000000191763b5c -[PHQuery executeQuery] :52 (in Photos)
25 Photos 0x00000001916c2998 ___67+[PHAssetCollection fetchAssetCollectionsWithType:subtype:options:]_block_invoke :72 (in Photos)
26 Photos 0x000000019175fe48 +[PHObject authorizationAwareFetchResultWithOptions:fetchBlock:] :88 (in Photos)
27 Photos 0x00000001916c2944 +[PHAssetCollection fetchAssetCollectionsWithType:subtype:options:] :84 (in Photos)
Typically on 32-bit devices, such as iPhone5, iPhone4S, a crash report looks like this:
Exception Type: SIGABRT
Exception Codes: #0 at 0x1b448ad4
Crashed Thread: 1
Application Specific Information:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException' reason: 'CoreData: Cannot load NSManagedObjectModel. nil is an illegal URL parameter'
Last Exception Backtrace:
0 CoreFoundation 0x1bca0df7 ___exceptionPreprocess :131 (in CoreFoundation)
1 libobjc.A.dylib 0x1af03077 _objc_exception_throw :39 (in libobjc.A.dylib)
2 CoreData 0x1dc190c5 +[NSManagedObjectContext initialize] :1 (in CoreData)
3 PhotoLibraryServices 0x256a45d5 ___44+[PLManagedObjectContext managedObjectModel]_block_invoke :89 (in PhotoLibraryServices)
4 AssetsLibraryServices 0x24fc527d ___pl_dispatch_once_block_invoke :19 (in AssetsLibraryServices)
5 libdispatch.dylib 0x1b346083 __dispatch_client_callout :23 (in libdispatch.dylib)
6 libdispatch.dylib 0x1b346c65 _dispatch_once_f :43 (in libdispatch.dylib)
7 AssetsLibraryServices 0x24fc5267 _pl_dispatch_once :77 (in AssetsLibraryServices)
8 PhotoLibraryServices 0x256a456d +[PLManagedObjectContext managedObjectModel] :73 (in PhotoLibraryServices)
9 Photos 0x26139475 +[PHQuery _relationshipForFetchType:predicate:] :257 (in Photos)
10 Photos 0x2613a4cd -[PHQuery collectionFetchType] :85 (in Photos)
11 Photos 0x261392b1 -[PHQuery copyWithZone:] :303 (in Photos)
12 Photos 0x26158239 -[PHFetchResult initWithQuery:oids:registerIfNeeded:usingManagedObjectContext:] :125 (in Photos)
13 Photos 0x26158567 -[PHFetchResult initWithQuery:] :81 (in Photos)
14 Photos 0x2613c0cb -[PHQuery executeQuery] :53 (in Photos)
15 Photos 0x260aaf4f ___67+[PHAssetCollection fetchAssetCollectionsWithType:subtype:options:]_block_invoke :73 (in Photos)
16 Photos 0x2613898d +[PHObject authorizationAwareFetchResultWithOptions:fetchBlock:] :63 (in Photos)
17 Photos 0x260aaf03 +[PHAssetCollection fetchAssetCollectionsWithType:subtype:options:] :97 (in Photos)
This seems to be a coredata error, I also don't understand why AssetsLibraryServicesand PhotoLibraryServicesexist in the latest crash report. I have tried many ways, but cannot reproduce the crash. Any help is appreciated.