Мой общий вопрос: если и как можно проверить, поддерживает ли произвольный объект данное свойство. Для методов это просто. Я отправил бы ответ replyToSelector: сообщение объекту и проверить результат. Я не могу найти аналогичный механизм для свойств.Тестирование на существование свойства (т. Е. NumberOfValidItemsForDrop)
Моя конкретная проблема заключается в том, что я пишу пользовательский NSView, который поддерживает удаление файлов изображений (множественное число) на него. Я строию 10.9 и развертываю 10.6. Для машин с 10.7 и более поздними версиями я хотел бы воспользоваться обратной связью пользователя, представленной в изображении перетаскивания (число и допустимые файлы), с помощью метода enumerateDraggingItemsWithOptions:...
и свойства numberOfValidItemsForDrop
.
Моя первоначальная мысль заключается в следующем. Проверьте отправителя (объявленный id < NSDraggingInfo>), предоставленный методу draggingEntered:
. Если это так, используйте механизмы, предусмотренные в 10.7. Если нет, вернитесь к более ранним механизмам.
if([sender respondsToSelector:@selector(enumerateDraggingItemsWithOptions:forView:classes:searchOptions:usingBlock:) ])
{
__block NSInteger n=0;
[sender enumerateDraggingItemsWithOptions:NSDraggingItemEnumerationClearNonenumeratedImages
forView:self
classes:types
searchOptions:options
usingBlock:^(NSDraggingItem *draggingItem, NSInteger idx, BOOL *stop) { ++n; } ];
self.numberOfValidItemsForDrop = n;
rval = (n>0 ? NSDragOperationCopy : NSDragOperationNone);
}
else
{
NSArray *itemsInDrag = [[sender draggingPasteboard] readObjectsForClasses:types options:options];
rval = [itemsInDrag count]>0 ? NSDragOperationCopy : NSDragOperationNone);
}
Меня беспокоит то, является ли назначение на numberOfValidItemsForDrop вызовет проблемы в 10.6 среде. Я собрал быстрый тест, в котором я назначил фиктивное свойство внутри условия if (0), и компилятор задохнулся.
if(0)
{
sender.bogus=1;
}
Это не то же самое, что свойство недействительно в среде разработки. Но, это меня беспокоит, что назначение numOfValidItemsForDrop также может быть проблемой во время выполнения на 10.6, даже если оно никогда не должно выполняться.
Я собрал небольшое приложение-манекен, которое я отправил моему тестеру, но еще не слышал назад и хотел бы продолжить работу над этим проектом.
Спасибо за любую/всю информацию.
Я попробую это. И проверит также ссылку. – MikeMayer67
Это отвечает на тестовую половину вопроса гораздо более прямым образом, чем я предлагал (тестирование связанного метода). Но у меня все еще есть большой вопрос относительно того, будет ли установка свойства внутри предложения if безопасным, если свойство не существует. – MikeMayer67
Я думаю, что только проверить свойство Obj-C - это дорогостоящее дело. –