"этот класс не является ключевым значением, совместимым с кодировкой для ключа. Я знаю его немного поздно, но мой ответ отличается, поэтому я думаю, что он должен быть опубликован. Я неправильно нажимал второй контроллер. Вот пример
Неправильный способ нажатия контроллера
UIViewController* controller = [[UIViewController
alloc]initWithNibName:@"TempViewController" bundle:nil];
[self.navigationController pushViewController:controller animated:true];
Правильный путь
TempViewController* controller = [[TempViewController
alloc]initWithNibName:@"TempViewController" bundle:nil];
[self.navigationController pushViewController:controller animated:true];
Я не нашел ответа, как указано выше, так что может быть, это может помочь кому-то с той же проблемой
Вторая цитата верна. Вторая цитата взята из справочника языка языка Python (хотя вы указали неверную ссылку), а ссылка на язык считается более авторитетной, чем руководство по использованию. Кроме того, он соответствует фактическому поведению; макрос PyDescr_IsData
, который вы нашли, является фактической программой , используемой в object.__getattribute__
, чтобы определить, что считается дескриптором данных, а - __set__
или __delete__
приведет к тому, что tp_descr_set
будет непустым.
Ссылка на язык также объясняет, почему Set
не отменяет экземпляр dict для a.b
:
Если он не определяет
__get__()
, то доступ к атрибуту будет возвращать сам объект дескриптора, если в словаре экземпляра объекта нет значения. [...] Дескрипторы данных с__set__()
и__get__()
, определенными, всегда переопределяют переопределение в словаре экземпляра.Определение либо
__set__
, либо__delete__
будет устанавливать типtp_descr_set
и создавать экземпляры дескрипторов данных типа. Дескриптор данных всегда будет вызываться для попыток установить или удалить атрибут, которым он управляет, даже если есть запись в типе экземпляра с тем же именем, и даже если он имеет только__set__
, и вы пытаетесь удалить атрибут или наоборот. (Если у него нет необходимого метода, он вызовет исключение.) Если в дескрипторе данных также есть__get__
, он также будет перехватывать попытки получить атрибут; в противном случае Python отпадет от обычного поведения поиска атрибутов, как если бы он вообще не был дескриптором.