【问题标题】:EXC_BAD_ACCESS code=1 when setting objective C block by Swift codeEXC_BAD_ACCESS 代码=1 当通过 Swift 代码设置目标 C 块时
【发布时间】:2019-08-07 13:52:36
【问题描述】:

我有混合应用程序(使用 Objective C 代码的 Swift 应用程序) 在 Swift 代码中,我设置了一个块数组并在 ObjC 代码中运行这些块。但是应该运行该块时有一个 EXC_BAD_ACCESS 代码=1。

当我在 ObjC 代码中设置块数组时,一切正常。

知道为什么 Swift 对运行数组中的块如此不满意吗?

【问题讨论】:

    标签: objective-c swift closures objective-c-blocks


    【解决方案1】:

    我找到了解决方案。我的块数组是一个属性。是这样的:

    //Class.h - before fix
    
    typedef BOOL (^TextReplacementDecisionBlock)(NSString *, NSRange, NSString *);
    
    @property (nonatomic, strong) NSArray *decisionBlocks; // led to EXC_BAD_ACCESS
    

    对于 Obj C 来说还可以,但对于 Swift 来说还不够。 Swift 需要更具体的块来正确地将其转换为闭包。像这样:

    //Class.h - after fix
    
    typedef BOOL (^TextReplacementDecisionBlock)(NSString *, NSRange, NSString *);
    
    @property (nonatomic, strong) NSArray<TextReplacementDecisionBlock> *decisionBlocks;
    

    【讨论】:

      猜你喜欢
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多