Использование initWithContentsOfURL для отображения сообщения, но возникли проблемы?

Я пытаюсь отобразить IUAlertview с пользовательским сообщением, полученным с веб-сайта при загрузке приложения. У меня есть контроль над сайтом, поэтому идея в том, что если я хочу изменить сообщение, я могу просто изменить сайт. Этим утром я спросил о том, как обновить персонализированное сообщение, и эта идея стала результатом, но теперь, когда я пытаюсь его закодировать, я получаю ошибки.

После просмотра других вопросов initWithContentsOfURL о переполнении стека я придумал следующий код:

NSStringEncoding *encoding = NULL;
    NSError *error;
    NSString *myHtml = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://www.gcsp.webuda.com/hi.htm"] usedEncoding:encoding error:&error];

    UIAlertView *message1 = [[UIAlertView alloc] initWithTitle:myHtml
                                                       message:myHtml
                                                      delegate:nil
                                             cancelButtonTitle:@"OK"
                                             otherButtonTitles:nil];
    [message1 show];

Я положил с в viewWillAppear метод, и он срабатывает, когда пользователь открывает приложение. Тем не менее, сообщение и заголовок UIAlertview не заполнены, и приложение не сообщает об ошибках. Может кто-нибудь помочь мне понять, почему мой код не работает?

Я очень ценю помощь!!

1 ответ

Решение

Если вы знаете, что кодировка текста на сайте всегда будет одинаковой, вы можете использовать метод:

- (id)initWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error;

вместо.

Я бы также предложил выполнять сетевые операции в фоновом режиме:

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0),
^{
    NSError *error;
    NSString *myHtml = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://www.gcsp.webuda.com/hi.htm"] encoding:NSUTF8StringEncoding error:&error];

    UIAlertView *message1 = [[UIAlertView alloc] initWithTitle:myHtml
                                                       message:myHtml
                                                      delegate:nil
                                             cancelButtonTitle:@"OK"
                                             otherButtonTitles:nil];

    //UI updates should be on main thread
    dispatch_async(dispatch_get_main_queue(),
    ^{
        [message1 show];
    });
});
Другие вопросы по тегам