Ожидаемый метод для чтения элемента словаря, не найденного в объекте типа 'id <NSCopy> - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь обновить свое приложение до Xcode 9.3.1 из 8, и у меня появляются следующие ошибки:

Ожидаемый метод для чтения элемента словаря, не найденного в объекте типа '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),
};

Кто-нибудь может указать мне правильное направление? Я выделил ошибки в коде.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Вы должны разыграть ваши параметры объекта

    // 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),
};
0 голосов
/ 12 мая 2018

Компилятор считает, что options имеет тип id<NSCopying>, а не NSDictionary *, что требуется для использования синтаксиса словаря [ключа].Ваш фрагмент кода не включает, где это объявлено, и где будет ошибка.

...