-1

Alassetslibrary を使用して、画像に関する情報を正しく取得するメソッドを実装しました。ご存知のように、非同期で動作しますが、私の場合は同期で動作する必要があります。画像に関する情報を読み込んでメソッドに戻るだけです。更新を必要としない唯一のビューとしての私のアプリケーション。メソッドを変更するにはどうすればよいですか? 現時点では、「return xmlList;」という行です。結果は常に null ですが、NSlog を使用したため、アセットがブロックで正しく読み取られていることがわかります。

-(NSString *) getPhotos{

NSMutableArray *idList = [[NSMutableArray alloc] init];
NSMutableArray *widthList = [[NSMutableArray alloc] init];
NSMutableArray *heightList = [[NSMutableArray alloc] init];
NSMutableArray *orientationList = [[NSMutableArray alloc] init];
NSMutableArray *dateList = [[NSMutableArray alloc] init];

__block XMLWriter* xmlWriter = [[XMLWriter alloc]init];
__block NSString *xmlList;
__block NSString *test;
__block ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
__block NSString *description = [[NSString alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
    if (group) {
        [group setAssetsFilter:[ALAssetsFilter allPhotos]];
        [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop){
            if (asset){
                NSString *description = [asset description];
                NSRange first = [description rangeOfString:@"URLs:"];
                NSRange second = [description rangeOfString:@"?id="];
                NSString *path = [description substringWithRange: NSMakeRange(first.location + first.length, second.location - (first.location + first.length))];
                [idList addObject:path];

                NSDictionary *data = [[asset defaultRepresentation] metadata];

                NSNumber *width = [[[asset defaultRepresentation] metadata] objectForKey:@"PixelWidth"];
                NSString *widthString = [NSString stringWithFormat:@"%@", width];
                [widthList addObject:widthString];

                NSNumber *height = [[[asset defaultRepresentation] metadata] objectForKey:@"PixelHeight"];
                NSString *heightString = [NSString stringWithFormat:@"%@", height];
                [heightList addObject:heightString];

                NSNumber *orientation = [[[asset defaultRepresentation] metadata] objectForKey:@"Orientation"];
                NSString *orientationString = [NSString stringWithFormat:@"%@", orientation];
                if(orientationString != NULL){
                    [orientationList addObject:orientationString];
                } else {
                    NSString *noOrientation = [[NSString alloc] init];
                    noOrientation = @"No orientation avaiable";
                    [dateList addObject:noOrientation];
                }

                NSString *dateString = [[[asset defaultRepresentation] metadata] objectForKey:@"DateTime"];
                if(dateString != NULL){
                    [dateList addObject:dateString];
                } else {
                    NSString *noDate = [[NSString alloc] init];
                    noDate = @"No date avaiable";
                    [dateList addObject:noDate];
                }
            }
        }];
    }
    if (group == nil){
        [xmlWriter writeStartDocumentWithEncodingAndVersion:@"UTF-8" version:@"1.0"];
        [xmlWriter writeStartElement:@"Data"];
        int i = 0;
        for(i = 0; i<=[idList count]-1; i++){
            [xmlWriter writeStartElement:@"Photo"];
            [xmlWriter writeAttribute:@"Id" value:[idList objectAtIndex:i]];
            [xmlWriter writeAttribute:@"Width" value:[widthList objectAtIndex:i]];
            [xmlWriter writeAttribute:@"Height" value:[heightList objectAtIndex:i]];
            [xmlWriter writeAttribute:@"Orientation" value:[orientationList objectAtIndex:i]];
            [xmlWriter writeAttribute:@"Date" value:[dateList objectAtIndex:i]];
            [xmlWriter writeEndElement:@"Photo"];
        }
        [xmlWriter writeEndElement:@"Data"];
        [xmlWriter writeEndDocument];
        xmlList = [xmlWriter toString];
    }

} failureBlock:^(NSError *error) {
    NSLog(@"error enumerating AssetLibrary groups %@\n", error);
}];

return xmlList;

}
4

1 に答える 1