iOS开发 Block内部如何实现弹框等待输入结果

作者:超级管理员 更新时间:2017-08-08 18:00:05 来源:未知 点击:15642
- (void)doSomethingWithBlock:(NSString *(^)())block {    NSLog(@"callback:%@", block());}- (void)cal
- (void)doSomethingWithBlock:(NSString *(^)())block {
    NSLog(@"callback:%@", block());
}
- (void)callMethod {
    
    __weak typeof(self) weakSelf = self;
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    dispatch_semaphore_t sema = dispatch_semaphore_create(0);
    
    dispatch_async(queue, ^{
        [self doSomethingWithBlock:^NSString *{
            __block NSString *resultString = nil;
            __strong typeof(weakSelf) strongSelf = weakSelf;
            // 信号量
            
            UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Title" message:@"message..." preferredStyle:UIAlertControllerStyleAlert];
            
            [alertController addTextFieldWithConfigurationHandler:nil];
            [alertController addAction:[UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleCancel handler:nil]];
            [alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
                // 获取弹框输入值
                resultString = [[alertController.textFields objectAtIndex:0] text];
            }]];
            
            [strongSelf presentViewController:alertController animated:YES completion:^{
                // 完成信号
                dispatch_semaphore_signal(sema);
            }];
            // 等待
            dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
            return resultString;
        }];
    });
}

这段代码感觉上是没有问题的~ 但是触发callMethod就立即会弹出弹框并输出callback:(null),无奈不知道如何解决,求大神
-------------------------------
我自己已经得到答案,信号量放错了地方,应该放在点击OK的响应下

推荐阅读

热门内容

【Qualcomm线下沙龙到会赠送30元

本帖最后由CSDNhanrui于2017...

社区福利----机械出版CSDN赠书第一

今天大Y我联合机械出版开启重磅新书赠送活...

揭秘共享单车中的物联网IOT技术应用!!

物联网开发免费公开课来啦,名额有限,手慢...

Xcode 模拟器不能正常运行app了

在模拟器上运行app提示 :The re...

更新xcode 8.0 尺寸分类问题

本帖最后由weixin_35824766...

想学IOS开发高阶一点的东西,从何开始

       学习,并从事IOS开发快两...

有奖话题:为物联网而生的Snapdrag

本帖最后由CSDNhanrui于2017...

ios CABasicAnimation

ios  CABasicAnimatio...

ios怎么实现3des+base64加密

http://blog.csdn.net...

xcode的错误提示不在相应的行号前

xcode8.3.3提示信息不在相应的行...

最新内容

要做好网站优化需要注意的几个地方

1、关键词分析这个是一名优秀SEO的前提,如何判断一个网站的关键词是否合理,需要...

c++函数中实参自己变化

#include #include #incl...

“SEO是什么”依然没动静

页面正常排名先要爬到第一页,最好能进前5。精选摘要并不总是原来的第一名结果,否则...

c++程序,实参在内部发生变化

#include #include #incl...

做营销型网站建设需要规避的几个误区

  互联网的飞速发展,也在推动着营销型网站建设行业的发展,技术越来越先进,功能越...

建站中要注意那几个关键点

1.主关键词和长尾词设置:主关键词就是我们一个网站的中心或者核心产品,要设置到首...

是main函数除了问题吗

#include   #include  ...

android如何跨界面通信?

今天遇到一个问题,想了很久都没什么头绪。这个问题是这样的。界面A中的私有的log...

错误:程序包不存在,可是明明都下下来了

刚开始学习使用Espresso,今天遇到一个问题,写了一个类:package c...

AndroidStudio为什么不识别android-sdk-build-tools

如题,我导入了一个项目后,提示failed to find Build Tool...

有关剑指offer中的问题,帮忙看看

在牛客网上刷了第一道题,就出师不利,请问什么错误???class Solutio...

C语言如何对图片base64编码后的字符串进行解码?

将一个图片进行base64编码后得到一个两万多位的字符串,如何对这个字符串进行解...

为什么AS会报这样的错误Gradle sync failed: Illegal char <:>

不知道是不是sdk没配置好造成的还是什么原因,请各位大神帮忙看看--------...

[andriod studio]如何设置多个路径的 jniLibs.srcDirs 一个内部一个是外部的lib

 jniLibs.srcDirs = ["libs","$EXTERN_DIR/...

Delphi XE开发android默认日期格式的问题

手机的日期格式已经设置为24小时制但是用XE8开发的程序全部都是用的12小时制,...

菜鸟提问,为什么会报错呢?

我就想用这个流程查个数据啊(数据库(Student)——》DataAdapter...

京东与百度合作 推动零售业智能化变革

    中关村在线消息:8月10日,京东与百度宣布达成全面战略合作,推出“京度计...

苹果iPhone 8延期 华为迎弯道超车机会?

    中关村在线消息:市场研究公司IDC数据显示,2017年第二季度华为全球智...

曾难倒很多人?微信账号终于支持注销了

    中关村在线消息:以往只有微信公众号支持注销,微信自主账号是不支持注销的,...

无边框旗舰 努比亚Z17天猫商城抢购中

  中关村在线消息:日前,努比亚正式发布年度旗舰Z17,努比亚Z17以其强悍的性...