【问题标题】:Expected method to read dictionary element not found on object of type 'id<NSCopy>在“id<NSCopy>”类型的对象上找不到读取字典元素的预期方法
【发布时间】:2018-05-12 02:17:11
【问题描述】:

我正在尝试将我的应用程序从 8 升级到 Xcode 9.3.1 并出现以下错误:

在“id”类型的对象上未找到读取字典元素的预期方法

我的代码是:

// Normalize the blending mode to use for the key.
// *** Error on next three lines ***
id src = (options[CCBlendFuncSrcColor] ?: @(GL_ONE));
id dst = (options[CCBlendFuncDstColor] ?: @(GL_ZERO));
id equation = (options[CCBlendEquationColor] ?: @(GL_FUNC_ADD));

NSDictionary *normalized = @{
    CCBlendFuncSrcColor: src,
    CCBlendFuncDstColor: dst,
    CCBlendEquationColor: equation,

    // Assume they meant non-separate blending if they didn't fill in the keys.
    // *** Error on next line ***
    CCBlendFuncSrcAlpha: (options[CCBlendFuncSrcAlpha] ?: src),
    CCBlendFuncDstAlpha: (options[CCBlendFuncDstAlpha] ?: dst),
    CCBlendEquationAlpha: (options[CCBlendEquationAlpha] ?: equation),
};

谁能指出我正确的方向?我已将代码中的错误加粗。

【问题讨论】:

  • 什么是options?为什么这段 Objective-C 代码用 Swift 标记?

标签: ios objective-c xcode nscopying


【解决方案1】:

编译器认为optionsid&lt;NSCopying&gt; 类型,而不是NSDictionary *,这是使用dictionary[key] 语法所必需的。您的代码 sn-p 不包括声明的位置,即错误所在的位置。

【讨论】:

    【解决方案2】:

    你必须转换你的对象选项

        // Normalize the blending mode to use for the key.
    id src = (((NSDictionary *)options)[CCBlendFuncSrcColor] ?: @(GL_ONE));
    id dst = (((NSDictionary *)options)[CCBlendFuncDstColor] ?: @(GL_ZERO));
    id equation = (((NSDictionary *)options)[CCBlendEquationColor] ?: @(GL_FUNC_ADD));
    
    NSDictionary *normalized = @{
        CCBlendFuncSrcColor: src,
        CCBlendFuncDstColor: dst,
        CCBlendEquationColor: equation,
    
        // Assume they meant non-separate blending if they didn't fill in the keys.
        CCBlendFuncSrcAlpha: (((NSDictionary *)options)[CCBlendFuncSrcAlpha] ?: src),
        CCBlendFuncDstAlpha: (((NSDictionary *)options)[CCBlendFuncDstAlpha] ?: dst),
        CCBlendEquationAlpha: (((NSDictionary *)options)[CCBlendEquationAlpha] ?: equation),
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-12
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      • 2021-08-30
      • 2013-11-07
      相关资源
      最近更新 更多