tab*_*ber 25 ios alasset alassetslibrary ios8.1
此代码在iOS 7中运行良好,但在iOS 8.1中,位于"我的照片流"专辑中的所有资源都不在结果块中.(未调用failureBlock.)常规专辑和共享专辑可以正常工作.
我尝试了接受的答案:尝试从assetForURL内部分配__block ALAsset时出错:resultBlock:
也就是说,我持有对ALAssetsLibrary对象的引用,监听ALAssetsLibraryChangedNotification事件(这不会发生顺便,但是很好.)我确保我的应用程序有权访问照片,我在wi-fi上,我在tableView中看到照片的缩略图很好.只是当我尝试加载它们时,assetForURL:它们总是为零.
// example URL: assets-library://asset/asset.JPG?id=1ECB69B9-DC7A-45A7-B135-F43317D3412C&ext=JPG
[self.library assetForURL:[NSURL URLWithString:url] resultBlock:^(ALAsset *asset) {
NSLog(@"Asset: %@", asset); // nil :(
} failureBlock:^(NSError *error) {
NSLog(@"Failure, wahhh!");
}];
Run Code Online (Sandbox Code Playgroud)
还有其他人看到这个问题吗?
And*_*sev 30
我有同样的问题.此刻切换到Photos框架对我来说不是一个选项,但幸运的是我找到了一个解决方法.你可能会发现它很难看,我怀疑当Photo Stream包含大量照片时它可能会很慢,但它总比没有好.
我们的想法是枚举Photo Stream资产组中的所有项目,并将必要的URL与每个项目的URL进行比较.幸运的是,它仍然有效.
我有一个像这样的方法(库是同一个类的ALAssetsLibrary属性,你可能需要在这段代码中初始化它):
- (void)loadItem:(NSURL *)url withSuccessBlock:(void (^)(void))successBlock andFailureBlock:(void (^)(void))failureBlock {
[library assetForURL:url
resultBlock:^(ALAsset *asset)
{
if (asset){
//////////////////////////////////////////////////////
// SUCCESS POINT #1 - asset is what we are looking for
//////////////////////////////////////////////////////
successBlock();
}
else {
// On iOS 8.1 [library assetForUrl] Photo Streams always returns nil. Try to obtain it in an alternative way
[library enumerateGroupsWithTypes:ALAssetsGroupPhotoStream
usingBlock:^(ALAssetsGroup *group, BOOL *stop)
{
[group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
if([result.defaultRepresentation.url isEqual:url])
{
///////////////////////////////////////////////////////
// SUCCESS POINT #2 - result is what we are looking for
///////////////////////////////////////////////////////
successBlock();
*stop = YES;
}
}];
}
failureBlock:^(NSError *error)
{
NSLog(@"Error: Cannot load asset from photo stream - %@", [error localizedDescription]);
failureBlock();
}];
}
}
failureBlock:^(NSError *error)
{
NSLog(@"Error: Cannot load asset - %@", [error localizedDescription]);
failureBlock();
}
];
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
13230 次 |
| 最近记录: |