Почему я должен бросить сам к идентификатору?

Это может быть достигнуто с помощью CTE, оконной функции, подобной row_number(), outer apply, или просто с помощью производной таблицы, которая, вероятно, менее запутана для вас. Это то, что у вас изначально было, но вы забыли также вернуть столбец oggetto из вашей производной таблицы, поэтому вы не смогли join на ней получить ошибку.

update uo
set uo.trasco_oggetto_pratica = tqi.OGGETTO_PRATICA
from utilizzi_oggetto uo
inner join 
    (select 
        max(OGGETTO_PRATICA) OGGETTO_PRATICA, 
        OGGETTO 
     from trasco_quadri_imm 
     group by OGGETTO) tqi on 
    tqi.OGGETTO = uo.OGGETTO 
5
задан Midhun MP 3 March 2016 в 19:36
поделиться

1 ответ

Обычно это означает, что существуют несколько initWithSource: имена методов на различных классах с конфликтующими типами аргумента. Помните, если переменная вводится как id компилятор не знает, каково класс это. Таким образом, если Вы звоните initWithSource: на id- типизированный объект и несколько классов имеют initWithSource: метод, компилятор по существу просто выбирает один из двух. Если это выбирает "неправильный", ну, в общем, Вы получаете "отличную ошибку" типа Objective C.

Итак, почему это происходит с Вами? Я не на 100% уверен, но помню это +[TBCTouchDelegate alloc] возвраты id. Таким образом объединение в цепочку вызовов alloc/init эквивалентно этому:

id o = [TBCTouchDelegate alloc];
touchDelegate = [o initWithSource:self];

Следовательно, Вы звоните initWithSource: на id- переменная определенного типа. Если существует конфликт initWithSource: метод, Вы могли получить эту ошибку компилятора.

Существует ли конфликтующий метод? Я проверил систему и единственный конфликт, в котором каждый был NSAppleScript:

- (id)initWithSource:(NSString *)source;

Теперь NSAppleScript часть Основы, но я заметил, что это - код iPhone. Таким образом, возможно, Вы только получаете эту ошибку при компиляции для средства моделирования а не устройства?

В любом случае, если это - Ваша проблема, Вы могли бы обойти ее путем разделения alloc/init на две различных строки:

touchDelegate = [TBCTouchDelegate alloc];
touchDelegate = [touchDelegate initWithSource:self];

Теперь, Вы звоните initWithSource: на полностью-переменной-определенного-типа (вместо id- введенный), таким образом, компилятор больше не должен предполагать который выбрать. Или Вы могли бросить возврат из +alloc:

touchDelegate = [(TBCTouchDelegate *)[TBCTouchDelegate alloc] initWithSource:self];

Другое решение состоит в том, чтобы переименовать initWithSource: избегать конфликта и возможно делать это более описательным. Вы не говорите, чем в настоящее время называют класс, ни для чего "источник", таким образом, я не могу вывести возможности.

7
ответ дан 14 December 2019 в 09:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: