Я пытаюсь создать полусложный набор анимаций просмотра (подумайте об анимированной версии формы NSMatrix
, где строки скользят по мере добавления или удаления других строк), и для создания анимации я создаю небольшой вспомогательный класс. .
Там я должен отслеживать различные представления, их упорядоченные индексы и некоторые другие значения, связанные с их анимацией.
С этой целью я использую экземпляр NSArray
для отслеживания порядка (индексов) представлений, и я хотел бы использовать NSDictionary
с представлениями в качестве ключей для отслеживания значений (сами значения находятся в вложенные словари). т.е. Я хотел бы иметь возможность сделать что-то, например (псевдокод):
NSMutableDictionary* viewValuesDict = [NSDictionary dictionary];
// Loop thru an ordered NSArray
for( (NSView*) view in viewsArray ) {
// Get some values we'll need later
NSDictionary* associatedValues = [view getSomeValues];
// ...and put them into viewValuesDict...
[viewValuesDict setObject:associatedValues forKey:view];
// and then things break because the NSView 'view'
// doesn't support copyWithZone.... darn
}
Проблема в том, что я, конечно, не могу использовать экземпляры NSView
в качестве ключей словаря, потому что ключи добавляются с помощью copyWithZone
, который NSView
не реализует.
Итак, как лучше всего получить уникальный ключ для экземпляра NSView
? Я мог бы предположительно использовать [obj description]
, так как адрес памяти, который вы возвращаете, является идеальным UID, но, конечно, система должна работать с любым подклассом NSView
, который может возвращать что-то совершенно другое, так что это нехорошо.
Или мне стоит попробовать что-то совсем другое? Может есть альтернатива NSDictionary
, где ключи просто не копируются? Потому что в этом случае мне действительно не нужно копировать ключи.