上一篇:我試圖在我的相機膠捲中獲取照片的數量,我開始使用塊,但一直有一些困難。獲取保存的照片的塊值
現在: 這裏是我更新的代碼,我使用異步行爲,但在我的塊有機會完成之前返回一個值。
#import "CoverViewController.h"
#import <AssetsLibrary/AssetsLibrary.h>
@interface CoverViewController() <UITextFieldDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
@property(nonatomic, weak) IBOutlet UICollectionView *collectionView;
@property (assign) NSUInteger numberOfPhotos;
@end
@implementation CoverViewController
@synthesize CoverView;
- (void)viewWillAppear:(BOOL)animated
{
NSLog(@"viewWillAppear");
[self beginLoadingPhotoInfo];
}
//Photo collection info
- (void)beginLoadingPhotoInfo {
NSLog(@"loaded beginloadingphotoinfo");
__weak CoverViewController *__self = self;
[self PhotoCount:^(NSUInteger photoCount) {
__self.numberOfPhotos = photoCount;
}];
//[__self.CoverView reloadData];
}
- (void)PhotoCount:(void(^)(NSUInteger))completionBlock {
NSLog(@"photo count start");
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
__block NSInteger result = 0;
void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop){
if(group != nil) {
NSLog(@"if");
result += [group numberOfAssets];
NSLog(@"enum: %d", result);
}
else {
NSLog(@"else");
//nil means we are done with enumeration
if (completionBlock) {
completionBlock(result);
}
}
};
[library enumerateGroupsWithTypes: ALAssetsGroupSavedPhotos
usingBlock:assetGroupEnumerator
failureBlock:^(NSError *error) {NSLog(@"Problems");}
];
NSLog(@"result: %u", result);
}
// Layout of collection
//Number of cells in collection
- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section {
NSLog(@"returned number: %d", self.numberOfPhotos);
return self.numberOfPhotos;
}
@end
我已經添加了一切,這是我的coverviewcontroller.h文件相關,但代碼似乎塊完成之前加載。這裏是我嘗試查找錯誤,它顯示在我的塊完成之前,photoCount返回0。
2013-07-27 21:16:00.986 slidr[1523:c07] viewWillAppear
2013-07-27 21:16:00.987 slidr[1523:c07] loaded beginloadingphotoinfo
2013-07-27 21:16:00.987 slidr[1523:c07] photo count start
2013-07-27 21:16:00.988 slidr[1523:c07] result: 0
2013-07-27 21:16:00.989 slidr[1523:c07] returned number: 0
2013-07-27 21:16:01.012 slidr[1523:c07] if
2013-07-27 21:16:01.013 slidr[1523:c07] enum: 3
2013-07-27 21:16:01.014 slidr[1523:c07] else
有什麼想法嗎?
我將如何從另一種方法引用此方法?我在問題的底部添加了我的完整問題,因爲我不想在評論中使用很多代碼。 – lostAstronaut
我已經更新瞭如何使用它的答案。這是一個非常輕的用法,並且可能您想要獲取並緩存關於照片的更多信息,只是有多少。每次需要關於它的特定信息時,您都不應該遍歷整個照片庫。 – Fabian
嘿,我接受你的答案,因爲你是對的,並有不同的幫助。任何時候你都可以向我解釋什麼__Block <<<類型的自我>>> ext部分。 (我理解重裝數據,但之前的部分對我有點困惑 – lostAstronaut