Загрузка текста для UIButton и UITextView в фоновом режиме (простая CMS) - PullRequest
0 голосов
/ 09 мая 2011

Я хочу использовать функцию CMS в своем приложении для iPhone.Я хочу загрузить текст и изображение из Интернета и применить их к UIImageView, UIButton и UITextView.Однако я получаю ошибку.В настоящее время код отлично работает с загрузкой изображения.У меня был текстовый код в коде viewDidAppear, однако пользователь не мог взаимодействовать с экраном до тех пор, пока текст не был загружен, поэтому я переместил его в метод loadInfo с помощью Image, однако ему это не понравилось и я получил плохой доступошибка.И напечатал в консоли следующее:

2011-05-08 21:26:13.770 Fraction Calculator Lite[2184:6b03] bool _WebTryThreadLock(bool), 0x62338d0: Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be a result of calling to UIKit from a secondary thread. Crashing now...

Кто-нибудь знает, в чем может быть моя проблема?

Спасибо!

Это мой код:

- (void)viewDidAppear:(BOOL)animated {
    [self performSelectorInBackground:@selector(loadInfo) withObject:nil]; 
}

-(void) loadInfo {
    NSAutoreleasePool *arPool = [[NSAutoreleasePool alloc] init];

    NSError *error;
    NSString *internetTest = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://lindahlstudios.com/cms/internettest.txt"] encoding:NSUTF8StringEncoding error:&error];
    if ([internetTest isEqualToString: @"Internet Connection Complete"]) {
        UIImage *img1 = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://lindahlstudios.com/cms/adimage.png"]]];

        [image1 setImage:img1];
        [img1 release];

        NSString *string = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://lindahlstudios.com/cms/adtext.txt"] encoding:NSUTF8StringEncoding error:&error];
        NSString *string2 = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://lindahlstudios.com/cms/price.txt"] encoding:NSUTF8StringEncoding error:&error];

        [adText setText:string];  //Thread 8: Program received signal: "EXC_BAD_ACCESS"
        [price setTitle:string2 forState:UIControlStateNormal];        
    }

    [arPool release];
}

1 Ответ

0 голосов
/ 09 мая 2011

Вы не можете вызывать операции UIKit в фоновом потоке.Я бы посоветовал вам получить данные в фоновом потоке, а затем обновить их в основном потоке.

Использовать блоки для простоты кодирования,

Как только вы получите NSData в фоновом потоке, просто назначьте егоUIImage и т. д. в главном потоке через блоки,

   //get NSData from URL
   dispatch_async(dispatch_get_main_queue(), ^{
          //set  assignments for UIImage here.
   });
...