NSXMLParserDelegate и iPhone SDK 3.1.X - PullRequest
3 голосов
/ 21 июня 2010

У меня есть приложение в магазине, которое было построено для 3.1.2, но которое зависало под 4.0GM.Я исправил проблему сбоя с помощью Xcode 3.2.3, но также получал предупреждения о том, что такой-то класс не реализует NSXMLParserDelegate.Я добавил к заголовкам, и все казалось хорошо.Я отправил приложение, и оно ожидает рассмотрения.Эта последняя версия была скомпилирована с базовым SDK 4.0 и целью развертывания 3.1.2.

Проблема, с которой я столкнулся, состоит в том, что сегодня утром я открыл проект в Xcode 3.2.2 и при сборке на базеSDK 3.1.2, я получаю ошибки компиляции, говоря, что NSXMLParserDelegate не существует.Означает ли это, что мое приложение, ожидающее проверки, может выйти из строя на устройствах 3.1.2?Это странно, потому что мои бета-тестеры, которые используют 3.1.3 и я думаю 3.1.2, сказали, что приложение работает хорошо.Разве это не должно произойти сбой, если он не может скомпилироваться с базовым SDK 3.1.2?

Я думаю, что это должно быть нормально обсуждать в отношении 4.0 NDA, поскольку моя проблема специфична для 3.1.X.

1 Ответ

4 голосов
/ 23 июня 2010

Прежде всего, NDA был отменен на этой неделе, так что нет проблем с обсуждением iOS 4.0 SDK.

Что касается вашего вопроса: есть разница между компиляцией и запуском приложения.

Протокол NSXMLParserDelegate был добавлен в iOS4 SDK. В предыдущих версиях SDK методы делегата синтаксического анализатора XML были объявлены в категории. В iOS4 эти методы были перенесены в специальный протокол, что делает его чище. Во время выполнения нет никакой разницы. После компиляции приложение ничего не знает о протоколах или категориях. NSXMLParser просто проверит, реализован ли определенный метод делегата (через responsedsToSelctor ), поэтому он будет работать нормально.

В целом, это не проблема собрать с iOS4 SDK и запустить на 3.0. Вы должны убедиться, что вы не вызываете методы, которые не существуют в 3.0. Это очень легко сделать, вызвав RespondsToSelector . Он позволяет вам создавать одно приложение, которое работает на всех версиях ОС, но при этом позволяет вызывать методы, специфичные для 4.0.

Надеюсь, это имеет смысл ...

...