NSSet для NSData, затем снова для GameKit? - PullRequest
9 голосов
/ 20 марта 2010

Я пытаюсь выполнить синхронизацию редактирования изображений между двумя приложениями, работающими на разных iPhone. Я хотел бы отправить NSSet * с одного устройства на другое (что я предполагаю, включает инкапсуляцию в NSData), затем расшифровать его обратно в NSSet, а затем использовать его в функции типа touchesMoved. Это возможно, или я должен вместо этого работать над синхронизацией UIImages? Я беспокоюсь, что синхронизация UIImage будет слишком большой задержкой для взаимодействия в реальном времени.

Спасибо за вашу помощь!

1 Ответ

14 голосов
/ 20 марта 2010

Я так понимаю, вы имеете дело с набором UITouch. Это не будет работать, поскольку UITouch не реализует NSCoding (я думаю).

Вам потребуется извлечь необходимую информацию из каждого UITouch, а затем поместить ее в нечто, соответствующее NSCoding.

NSSet * someSet = ...;
NSData * serializedSet = [NSKeyedArchiver archivedDataWithRootObject:someSet];

Затем отправьте эти данные с помощью игрового комплекта.

Другое устройство, когда оно получает данные, преобразует их обратно в набор.

NSData * receivedData = ....;
NSSet * set = [NSKeyedUnarchiver unarchiveObjectWithData:receivedData];

Тогда вы бы вызвали любой метод, который вам нужен для обработки набора с самим собой. Поскольку вы, вероятно, меняете здесь некоторые компоненты пользовательского интерфейса, обязательно вызовите селектор для запуска в главном потоке.

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

...