Совместим ли подкласс UIDocument IOS 5 с обратной совместимостью?

#ios #backwards-compatibility #icloud #uidocument

#iOS #обратная совместимость #icloud #uidocument

Вопрос:

Для поддержки iCloud рекомендуется использовать UIDocument подкласс. Если я определю новый подкласс, установлю для целевой версии проекта значение 3.0 и протестирую использование для iOS 5 перед использованием моего нового подкласса, будет ли код работать на iOS 4 или связывание в подклассе нарушает обратную совместимость?

Ответ №1:

UIKit может быть слабосвязанным, но результаты будут неопределенными, если вы попытаетесь инициализировать подкласс UIDocument or UIDocument . Вам понадобится что-то вроде:

 if (NSStringFromClass(@"UIDocument")) 
{
    ...
}
 

Это сделало бы его совершенно бесполезным для ваших целей. Итак, ответ на ваш вопрос — нет, любой связанный с ним код UIDocument не будет выполняться, но вы можете установить условные проверки вокруг такого кода. Вам лучше найти альтернативный метод сохранения данных.

Комментарии:

1. Спасибо за ответы. Я не хотел использовать UIDocument на iOS4, просто не был уверен, смогу ли я определить подкласс iOS5, не заставляя всю программу не запускаться в предыдущих версиях. Насколько я понимаю ваши полезные ответы, все должно быть в порядке, если я удостоверюсь, что UIKit имеет слабую связь ( проверьте наличие версии или класса перед его фактическим использованием), так что это кажется правильным общим решением для реализации функций iCloud с обратной совместимостью.

2. Выполнено. На самом деле настройки ссылок по умолчанию работают нормально (новый код слабо связан автоматически), если вы установили правильную цель Xcode (например, OS 3.1). Подтвердили, что это работает, хотя будьте осторожны, чтобы вручную также слабая ссылка libSystem.dylib или код, созданный с использованием последней версии XCode, приведет к сбою в OS 3.x (из-за «блоков»)

Ответ №2:

Ему необходимо будет связать с UIDocument, чтобы понять, что на самом деле означает подкласс UIDocument. Например, если у вас есть класс Bar, который подклассы Foo, и Foo имеет метод ‘doBaz’, вы можете вызвать ‘doBaz’ для экземпляра Bar, но если компоновщик не знает Foo, он не знает, что Bar может doBaz .

Возможно, вам удастся создать слабую ссылку. Аналогичная ситуация была при выходе iOS 4, когда iAds были недоступны в iOS 3, которая в то время была лучшей на iPad.

Комментарии:

1. Это зависит от того, может ли UIDocument быть слабосвязанным. Поскольку это часть UIKit, то я думаю, что да, нет.