Как связаться со страницей единственной страницы автора/компании на App Store?

По сути, вы пытались использовать значение nil в тех местах, где Swift разрешает использовать только значения, отличные от nil, сказав компилятору, чтобы он доверял вам, что там никогда не будет значения nil, что позволило вашему приложению компилироваться.

Существует несколько сценариев, приводящих к такого рода фатальной ошибке:

  1. принудительное развертывание:

    let user = someVariable!
    

    Если someVariable равен нулю, то вы ' Я получу крушение. Делая принудительную развёртку, вы перекладывали ответственность за проверку на ноль от компилятора к вам, в основном, выполняя принудительную развёртку, вы гарантируете компилятору, что там никогда не будет нулевых значений. И угадайте, что произойдет, если каким-то образом значение nil заканчивается в someVariable?

    Решение? Используйте необязательную привязку (иначе if-let), выполняйте там обработку переменных:

    if user = someVariable {
        // do your stuff
    }
    
  2. принудительное (нисходящее) приведение:

    let myRectangle = someShape as! Rectangle
    

    Здесь принудительное приведение вы говорите компилятору больше не беспокоиться, так как у вас всегда будет экземпляр Rectangle. И пока это действительно так, вам не о чем беспокоиться. Проблемы начинаются, когда вы или ваши коллеги из проекта начинаете распространять не прямоугольные значения.

    Решение? Используйте необязательную привязку (иначе if-let), выполняйте там обработку переменных:

    if let myRectangle = someShape as? Rectangle {
        // yay, I have a rectangle
    }
    
  3. Неявно развернутые необязательные параметры. Предположим, у вас есть следующее определение класса:

    class User {
        var name: String!
    
        init() {
            name = "(unnamed)"
        }
    
        func nicerName() {
            return "Mr/Ms " + name
        }
    }
    

    Теперь, если никто не перепутает свойство name, установив его в nil, то оно работает, как и ожидалось, однако, если User ] инициализируется из JSON, в котором отсутствует клавиша name, затем вы получаете фатальную ошибку при попытке использовать свойство.

    Решение? Не используйте их :) Если вы не уверены на 102%, что свойство всегда будет иметь значение, отличное от нуля, к моменту его использования. В большинстве случаев преобразование в необязательный или необязательный будет работать. Если вы сделаете его необязательным, компилятор также поможет вам, указав пропущенные вами пути к кодам, указав значение для этого свойства

  4. Несвязанные или еще не подключенные выходы. Это частный случай сценария № 3. По сути, у вас есть какой-то загруженный XIB класс, который вы хотите использовать.

    class SignInViewController: UIViewController {
    
        @IBOutlet var emailTextField: UITextField!
    }
    

    Теперь, если вы пропустили подключение к розетке из редактора XIB, приложение вылетит, как только вы захотите использовать розетку. Решение? Убедитесь, что все розетки подключены. Или используйте оператор ? для них: emailTextField?.text = "my@email.com". Или объявите выход как опциональный, хотя в этом случае компилятор заставит вас развернуть его по всему коду.

  5. Значения, полученные из Objective-C, которые не имеют аннотаций обнуляемости. Предположим, у нас есть следующий класс Objective-C:

    @interface MyUser: NSObject
    @property NSString *name;
    @end
    

    Теперь, если аннотации обнуляемости не заданы (явно или через NS_ASSUME_NONNULL_BEGIN / NS_ASSUME_NONNULL_END), тогда свойство name будет импортировано в Swift as String! (IUO - неявно развернутый необязательный). Как только какой-то swift-код захочет использовать это значение, произойдет сбой, если name равно нулю.

    Решение? Добавьте аннулируемые аннотации к вашему коду Objective-C. Однако остерегайтесь, компилятор Objective-C немного допустим, когда дело доходит до обнуляемости, вы можете получить нулевые значения, даже если вы явно пометили их как nonnull.

  6. [Тысяча сто двадцать семь]
10
задан Julio Gorgé 29 June 2009 в 21:33
поделиться

6 ответов

NSString *str = @"itms-apps://ax.search.itunes.apple.com/WebObjects/MZSearch.woa/wa/search?media=software&term=glbasic";
[[UIApplication sharedApplication] openURL: [NSURL URLWithString:str]];

Мне кажется, это работает !!

6
ответ дан 4 December 2019 в 00:26
поделиться

Попробуйте заменить itunes на phobos , например:

http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewArtist?id=293559501

Ссылки на phobos.apple.com откроются в Приложение App Store, а ссылки на itunes.apple.com будут открываться в приложении iTunes.

0
ответ дан 4 December 2019 в 00:26
поделиться

просто зайдите в itunes, затем нажмите на название своей компании, скопируйте и вставьте его куда хотите. я думаю, что предыдущие ответы были полезны для предыдущих версий itunes

-2
ответ дан 4 December 2019 в 00:26
поделиться

Итак, процедура из Технических вопросов и ответов Apple по этой теме не работает? (Это похоже на ответ Джейсона , который, по вашему мнению, не увенчался успехом.) Это действительно сработало для пользователя, который отправил этот другой вопрос и этот , хотя, возможно, разница заключается в ссылке на приложение по сравнению со ссылкой на компанию ?

0
ответ дан 4 December 2019 в 00:26
поделиться

Еще проще использовать адреса itunes.com. http://itunes.com/CompanyName (удалите все пробелы в компании).

6
ответ дан 4 December 2019 в 00:26
поделиться

Я думаю, что в примере кода Apple есть ошибка. Измените

self.iTunesURL = [response URL];

на

self.iTunesURL = [request URL];
-1
ответ дан 4 December 2019 в 00:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: