Jac*_*cob 1 objective-c ios alassetslibrary
我正在编写一个多线程应用程序,需要在后台集中上传ALAssetsLibrary中的照片.所以我有一个NSOperation子类,它通过资产的URL找到适当的ALAsset,并将图像添加到上传队列.
在当前ALAsset的上传队列中,我需要从图像中获取元数据,但是我遇到了一个问题:在ALAsset的ALAssetRepresentation上调用它们时,-metadata和-fullResolutionImage方法都不会返回.他们只是无限期地挂在那里.我尝试在LLDB中打印这些方法中的每一个的值,但它挂起了调试器,我最终杀死了Xcode,信号9样式.在后台队列上调用这些方法.
我在iPad 2上测试这些.这是在-assetForURL的成功块中找到ALAsset时添加到上传队列的方法:resultBlock:failureBlock:
- (void)addMediaToUploadQueue:(ALAsset *)media {
@autoreleasepool {
ALAssetRepresentation *defaultRepresentation = [media defaultRepresentation];
CGImageRef fullResolutionImage = [defaultRepresentation fullResolutionImage];
// Return if the user is trying to upload an image which has already been uploaded
CGFloat scale = [defaultRepresentation scale];
UIImageOrientation orientation = [defaultRepresentation orientation];
UIImage *i = [UIImage imageWithCGImage:fullResolutionImage scale:scale orientation:orientation];
if (![self isImageUnique:i]) return;
NSDictionary *imageDictionary = [self dictionaryForAsset:media withImage:i];
dispatch_async(self.background_queue, ^{
NSManagedObjectContext *ctx = [APPDELEGATE createManagedObjectContextForThread];
[ctx setUndoManager:nil];
[ctx performBlock:^{
ImageEntity *newImage = [NSEntityDescription insertNewObjectForEntityForName:@"ImageEntity"
inManagedObjectContext:ctx];
[newImage updateWithDictionary:imageDictionary
inManagedObjectContext:ctx];
[ctx save:nil];
[APPDELEGATE saveContext];
dispatch_async(dispatch_get_main_queue(), ^{
[self.fetchedResultsController performFetch:nil];
});
if (!currentlyUploading) {
currentlyUploading = YES;
[self uploadImage:newImage];
}
}];
});
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个类似的问题,我正在试图弄清楚我的头发.
事实证明我为ALAssetsLibrary设置了一个单例,我的代码没有正确调用它,一些ALAssets返回一个空的'fullResolutionImage'
在我的所有NSLog中,我一定错过了Xcode最重要的消息:
"无法尝试在其拥有的ALAssetsLibrary的生命周期内访问ALAssetPrivate"
点击此链接
我希望有所帮助
| 归档时间: |
|
| 查看次数: |
2124 次 |
| 最近记录: |