В моем проекте Xamarin Mac я создал программный код NSTableView. У меня есть пользовательский NSTableHeaderCell, который я использую для ячеек заголовка столбца. По какой-то причине на некоторых машинах, это бросает ошибкуПрограммно созданный бросок NSTableView Не удалось маршалировать объект Objective-C (Xamarin)
Failed to marshal the Objective-C object 0x121f77e90 (type: XXXTableHeaderCell). Could not find an existing managed instance for this object, nor was it possible to create a new managed instance (because the type 'XXXTableHeaderCell' does not have a constructor that takes one IntPtr argument).
Я знаю, это может быть выброшен, если вы загружаете из СИБ/XIb, но я строю все это в коде. Я также знаю, что это может произойти, если ваш управляемый объект получает GC'd, но объекты ячейки заголовка и столбца должны удерживаться в виде таблицы.
Ввод пустого конструктора, который принимает IntPtr, кажется, исправляет проблему, но я обеспокоен тем, что он создает новый объект, когда он должен использовать что-то, что уже существует (или должно быть, по крайней мере, по крайней мере).
Я пропустил что-то в том, как они держатся?
Без какого-либо кода трудно помочь, но да, почти всегда эта ошибка возникает из-за ObjC obj, который живет без его управляемого партнера (который получил GC'd). Я бы удостоверился, что ваш XXXTableHeaderCell имеет ссылку на класс. – SushiHangover
Чтобы это исключить, я добавил объекты класса для каждой ячейки столбца и заголовка в моем подклассе NSTableView. Я все еще пытаюсь понять, кто даже вызывает конструктор IntPtr. Это называется дважды, но у меня четыре столбца. Я бы ожидал, что это будет называться 4x или нет ... но два? К сожалению, я не могу опубликовать сам код. Я бы попытался взломать образец, но это займет больше времени, чем я могу, и это происходит только на некоторых машинах. – Brian