我尽力了,但我被困在这里了。我想从iPhone相机相册中导入所有的照片。所以我想出了这个ALAssestsLibrary API。
photoLibrary.enumerateGroupsWithTypes(ALAssetsGroupType(ALAssetsGroupSavedPhotos), usingBlock: { group in
if group != nil
{
}
}, failureBlock: { error in println("\(error)")})如何添加这一行代码。
group enumerateAssetsUsingBlock:groupEnumerAtion我试过添加这个,但它没有显示任何enumerateAssetsUsingBlock属性。?
这是真正的代码。!!目标-C
dispatch_async(dispatch_get_main_queue(), ^
{
@autoreleasepool
{
ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror)
{
NSLog(@"error occour =%@", [myerror localizedDescription]);
};
ALAssetsGroupEnumerationResultsBlock groupEnumerAtion = ^(ALAsset *result, NSUInteger index, BOOL *stop)
{
if (result!=NULL)
{
if ([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto])
{
[self.g_imageArray addObject:result];
}
}
};
ALAssetsLibraryGroupsEnumerationResultsBlock
libraryGroupsEnumeration = ^(ALAssetsGroup* group, BOOL* stop)
{
if (group == nil)
{
return;
}
if (group!=nil) {
[group enumerateAssetsUsingBlock:groupEnumerAtion];
}
[self updatephotoList];
};
self.library = [[ALAssetsLibrary alloc] init];
[self.library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos
usingBlock:libraryGroupsEnumeration
failureBlock:failureblock];
}
});发布于 2014-07-26 09:02:21
您的enumerationBlock和failureBlock没有正确的类型。例如,枚举块定义为
typealias ALAssetsLibraryGroupsEnumerationResultsBlock = (ALAssetsGroup!, UnsafeMutablePointer<ObjCBool>) -> Void这意味着参数是一个闭包,以(ALAssetsGroup!, UnsafeMutablePointer<ObjCBool>)作为参数并返回Void。
{
(group: ALAssetsGroup!, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
// ...
}所以您的代码应该如下所示:
photoLibrary.enumerateGroupsWithTypes(ALAssetsGroupType(ALAssetsGroupSavedPhotos),
usingBlock: {
(group: ALAssetsGroup!, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
if group != nil {
group.enumerateAssetsUsingBlock({
(asset: ALAsset!, index: Int, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
// ...
})
}
},
failureBlock: {
(myerror: NSError!) -> Void in
println("error occurred: \(myerror.localizedDescription)")
})由于Swift的“自动类型推理”功能,您也可以这样写
photoLibrary.enumerateGroupsWithTypes(ALAssetsGroupType(ALAssetsGroupSavedPhotos),
usingBlock: {
group, stop in
if group != nil {
group.enumerateAssetsUsingBlock({
asset, index, stop in
// ...
})
}
},
failureBlock: {
myerror in
println("error occurred: \(myerror.localizedDescription)")
})但在这种情况下,第一个版本可能更容易理解。
发布于 2020-08-19 09:20:33
注意,自iOS 9.0以来,就不再推荐该API了:
Swift 5
let library = ALAssetsLibrary()
library.enumerateGroups(withTypes: ALAssetsGroupType(ALAssetsGroupSavedPhotos), using: { (group, stop) -> Void in
if let group = group {
group.enumerateAssets({
(asset, index, stop) -> Void in
// ...
})
}
},
failureBlock: { myerror in
print("error occurred: \(myerror)")
})https://stackoverflow.com/questions/24968996
复制相似问题