首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用属性编写块定义?

如何使用属性编写块定义?
EN

Stack Overflow用户
提问于 2013-08-13 17:25:50
回答 3查看 508关注 0票数 0

我正在写一个用于从照片库中获取图像的类。我想要一个单一的方法,将从库中返回选定的图像。因此,我开始编写一个名为MediaBrowser的类。我使用的块将给出选定的图像。但是我对在哪里写块定义感到困惑。如果我出错了,请改正代码。

在MediaBrowser.h中

代码语言:javascript
复制
@interface MediaBrowser : NSObject

typedef UIImage* (^MediaBrowserCompletionHandler)(void);

+ (id)sharedInstance;
- (BOOL)startMediaBrowserFromViewController:(UIViewController*)controller
                          completionHandler:(MediaBrowserCompletionHandler)completion;
@end

在MediaBrowser.m中

代码语言:javascript
复制
@interface MediaBrowser () <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
@property (nonatomic, strong) MediaBrowserCompletionHandler completionHandler;
@end

@implementation MediaBrowser

static MediaBrowser *sharedMediaBrowser = nil;

+ (id)sharedInstance
{
    if (nil != sharedMediaBrowser) {
        return sharedMediaBrowser;
    }
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedMediaBrowser = [[MediaBrowser alloc] init];
    });
    return sharedMediaBrowser;
}

- (BOOL)startMediaBrowserFromViewController:(UIViewController *)controller completionHandler:(MediaBrowserCompletionHandler)completion
{
    self.completionHandler = [completion copy];
    if (([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum] == NO)
        || (controller == nil))
        return NO;

    UIImagePickerController *mediaUI = [[UIImagePickerController alloc] init];
    mediaUI.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;

    // Displays saved pictures from the Camera Roll album.
    mediaUI.mediaTypes = [[NSArray alloc] initWithObjects:(NSString *)kUTTypeImage, nil];

    // Hides the controls for moving & scaling pictures, or for
    // trimming movies. To instead show the controls, use YES.
    mediaUI.allowsEditing = NO;
    mediaUI.delegate = self;

    [controller presentModalViewController:mediaUI animated:YES];
    return YES;
}

// UIImagePickerControllerDelegate

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];
    UIImage *imageToUse;

    // Handle a still image picked from a photo album
    if (CFStringCompare ((CFStringRef) mediaType, kUTTypeImage, 0) == kCFCompareEqualTo) {
        imageToUse = (UIImage *) [info objectForKey:UIImagePickerControllerOriginalImage];
        // Do something with imageToUse
        if (self.completionHandler) {
            // Pass here UIImage
            self.completionHandler();
        }
    }

    [picker dismissModalViewControllerAnimated:YES];
}

@end
EN

回答 3

Stack Overflow用户

发布于 2013-08-13 20:15:39

我想出了答案。我想将选定的图像从UIImagePickerController发送到调用类。我写错了代码块。请参阅下面更正的代码。

在MediaBrowser.h中

块声明应该是:

代码语言:javascript
复制
typedef void (^MediaBrowserCompletionHandler)(UIImage *selectedImage);

在MediaBroser.m中

调用块应为:

代码语言:javascript
复制
if (self.completionHandler) {
     self.completionHandler(imageToUse);
}
票数 2
EN

Stack Overflow用户

发布于 2013-08-13 17:53:33

代码语言:javascript
复制
typedef UIImage* (^MediaBrowserCompletionHandler)(void);

@interface MediaBrowser : NSObject

@property (nonatomic,copy) MediaBrowserCompletionHandler handler;

@end
票数 1
EN

Stack Overflow用户

发布于 2013-08-13 17:29:17

这应该没问题。

代码语言:javascript
复制
typedef UIImage* (^MediaBrowserCompletionHandler)(void);

@interface MediaBrowser : NSObject
....
@end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18205312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档