Ошибка при отображении изображения - PullRequest
0 голосов
/ 15 января 2012

Я получаю следующую ошибку и не знаю, как ее избежать, может кто-нибудь помочь мне

bool _WebTryThreadLock (bool), 0x1ea990: попытался получить веб-блокировку из потокакроме основного потока или веб-потока.Это может быть результатом обращения к UIKit из вторичного потока.Авария сейчас ...

 - (void)loadImg {
        NSData* image = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://images.sugarscape.com/userfiles/image/DECEMBER2010/Lozza/HarryStyles2.jpg"]];
        UIImage* img = [[UIImage alloc] initWithData:image] ;
        [self performSelectorInBackground:@selector(showImg:) withObject:img];
    }

Ответы [ 3 ]

3 голосов
/ 15 января 2012

Не вызывайте никакие методы UIKit из потоков, отличных от основного потока.performSelectorInBackground:withObject: выполняет showImg: во вторичном потоке, и если вы вызываете какие-либо методы UIKit там, это может быть проблемой.

На самом деле это объясняется простым английским языком:

Это может быть результатом вызова UIKit из вторичного потока

0 голосов
/ 15 января 2012

Согласно Руководство по программированию потоков: Сводка по безопасности потоков , вы должны вызывать операции UIView в основном потоке. Попробуйте [self executeSelectorOnMainThread: @selector (showImg :) withObject: img waitUntilDone: YES].

0 голосов
/ 15 января 2012

Обновление пользовательского интерфейса из фонового потока небезопасно, что, как я полагаю, вы делаете здесь

[self performSelectorInBackground:@selector(showImg:) withObject:img];

Я думаю, что вы, возможно, поняли это неправильно, как хотите:

  1. Получение изображения в фоновом потоке
  2. Обновление интерфейса с этим изображением в основном потоке
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...