以下方法放在默认的全局队列中,以便从设备中获取一些照片.如果系统版本大于iOS 8,Photos则使用框架,否则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];
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序崩溃,在64位设备上,如iPhone 5S和更新型号,堆栈跟踪就是这样的.
Exception Type: SIGTRAP
Exception Codes: TRAP_BRKPT at 0x190c41b60
Crashed Thread: 25
Thread 25 Crashed:
0 PhotoLibraryServices 0x0000000190c41b60 +[PLModelMigrator …Run Code Online (Sandbox Code Playgroud) 我正在使用Xcode Version 6.1 (6A1052d),它运行良好,除了唯一的问题是自动完成并且代码意识被打破了swift项目.
我可以通过删除得到的数据和文件夹的解决它~/Library/Caches/com.apple.dt.Xcode,其被描述在这里,或者改变deployment target从项目8.1到8.0.
但是,第一个解决方案只持续了1或2天,从不再无效的地方开始,我不想经常删除文件夹或一直更改目标iOS版本.请帮我.
我有这个代码在iOS 7上工作:
NSData *imageData = [NSKeyedArchiver archivedDataWithRootObject:self.imageView.image];
UIImage *imageCopy = [NSKeyedUnarchiver unarchiveObjectWithData:imageData];
NSLog(@"%@",NSStringFromCGSize(imageCopy.size));
Run Code Online (Sandbox Code Playgroud)
但在iOS 8上,其imageCopy大小始终为零.UIImageView存档时也会发生同样的事情,未归档的imageView图像的大小为零.我发现在iOS 7中,UIImage标题如下:
UIImage : NSObject <NSSecureCoding, NSCoding>
Run Code Online (Sandbox Code Playgroud)
但在iOS 8上它是:
UIImage : NSObject <NSSecureCoding>
Run Code Online (Sandbox Code Playgroud)
看起来NSCodingiOS 8上缺少协议.我必须对实际图像数据进行编码:UIImagePNGRepresentation(self.imageView.image)而不是图像,以确保我得到一个好的图像.
有谁知道为什么会这样?它是为了向后兼容吗?我注意到iOS早期版本UIImage不符合NSCoding.
我使用下面的代码分享位于设备上的视频,它非常适合通过消息,Facebook和iCloud共享,但不适用于邮件,我可以看到邮件选项在那里,但在邮件草稿中,视频不是连接.
在代码中,videoAsset是一种PHAsset类型PHAssetMediaTypeVideo.
[[PHImageManager defaultManager] requestAVAssetForVideo:videoAsset options:nil resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
AVURLAsset* urlAsset = (AVURLAsset*)asset;
fileUrl = urlAsset.URL;
NSLog(@"fileUrl is %@",fileUrl);
NSArray *activityItems = [NSArray arrayWithObjects:fileUrl, nil];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
[self presentViewController:activityViewController animated:YES completion:nil];
}];
Run Code Online (Sandbox Code Playgroud)
如果我使用附加视频UIImagePickerController,它有效,我搜索但找不到答案,请帮忙.
我按照integration-into-xcode 中的教程进行操作,它适用于 Xcode 9,在 Xcode 10 中,选择 File -> Project/Workspace Setting,有一个 Build System 选项,默认选择新的构建系统,使用此默认设置, clang 路径始终设置为/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang,ExecPathObfuscator.xcspec 文件中的值不受尊重,如何使其与新构建系统一起使用?