Добавление элемента в NSPasteboard с помощью «setData»? - PullRequest
0 голосов
/ 20 августа 2009

Я учусь перетаскивать, чтобы упорядочивать элементы в NSOutlineView. (Это мой первый раз, используя NSPasteboard).

Из немного похожих примеров, которые я нашел в Интернете, кажется, вы используете:

[pasteboard setData: data forType: @"myapptype"];

Что следует поместить в NSData, когда вы делаете ход. Образцы помещают архивную версию объекта в качестве данных.

Атрибуты объекта могут измениться во время перетаскивания элемента, поэтому имеет ли смысл вместо этого вставлять туда указатель на объект?

1 Ответ

2 голосов
/ 20 августа 2009

Нет, вы обычно не хотите помещать указатель на объект на монтажный стол.

На картоне должен быть (в основном) один из двух типов вещей: данные или обещание предоставить данные, когда их об этом попросят. Срок службы картона потенциально (и вероятно) намного дольше, чем срок службы вашего приложения. Итак, представьте себе этот сценарий:

  • Пользователь копирует некоторые данные. Вы помещаете указатель на свой объект на перетаскивании.
  • Пользователь выходит из вашей программы. Ваш объект освобожден.
  • Пользователь запускает еще один экземпляр вашей программы и нажимает вставить.

Вероятный результат: вы зависаете, когда второй экземпляр вашей программы разыменовывает неверный указатель.

Какие данные на самом деле должны быть помещены на монтажную панель, может быть очень специфичным для вашей программы, но вы, вообще говоря, не хотите помещать туда «живые» данные. В ваших интересах архивировать. NSCoder может пригодиться для простого архивирования.

Я выделю здесь исключение и скажу, что один мог бы представить себе работу с указателями, если бы только когда-либо было сделано для перетаскивания (поскольку я не думаю, что вы можете сделать перетаскивание без работающей программы) и если вы очистили монтажный стол перетаскивания при выходе из программы. Но это не лучшая практика, и я бы сказал, что если вы не очень опытны и не очень осведомлены о подводных камнях, это рискованная техника.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...