2013-02-08 3 views
1

У меня есть представление, где я показываю UIImageView, который бесплатный Интернет, я использую для доставки данных NSXMLparser, которые загружаются правильно, проблема заключалась в том, что я использую для создания фона NSOperationQueue, поэтому обновляю изображение в моем главном представлении. образ, который не образует обновить их в любом случаеКак обновить UIVIewController до NSOperationQueue

Я оставляю здесь код ниже

- (void)viewDidLoad 
{ 
    [Base64 initialize]; 

    [super viewDidLoad]; 

    NSOperationQueue *queue = [NSOperationQueue new]; 
    NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self 
                      selector:@selector(loadDataWithOperation) 
                       object:nil]; 
    [queue addOperation:operation]; 
    [operation release]; 
} 

- (void) loadDataWithOperation { 
    getData=NO; 
    NSURL *url1 = [ NSURL URLWithString:[url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
    NSData *xmlData = [NSData dataWithContentsOfURL:url1]; 
    NSXMLParser *parser = [[NSXMLParser alloc]initWithData:xmlData]; 
    [parser setDelegate:self]; 
    [parser parse]; 

    [self performSelectorOnMainThread:@selector(showImage)withObject:nil waitUntilDone:NO]; 
} 

-(void)showImage 
{ 
    NSArray *imagen =[[NSArray alloc] initWithArray:xml]; 
    NSString *hola1 =[[imagen objectAtIndex:5]objectForKey:@"imagen"]; 
    NSData * dataa = [Base64 decode:hola1]; 
    img = [UIImage imageWithData:dataa]; 
    self.images.image = img; 
    [images setImage:img]; 
    [img release]; 
} 

Что я делаю неправильно? оцените вашу помощь

ответ

0

Я не вижу ничего очевидного (хотя очевидно, что мы не видим здания массива xml и не знаем точно, как выглядит сам XML). Вы должны указать NSLog (или установить контрольную точку и вручную проверить) xml, а также hola1 и dataa результаты showImage, чтобы точно определить, что происходит на каждом шагу.

Возможны две проблемы с фоновыми операциями и загрузка XML. Ни один из них, кажется, применимы и здесь, но я буду говорить об этом на всякий случай:

  1. Но нет ничего, что помешало бы загрузку и синтаксический разбор вашего XML, как вы продемонстрировали здесь. Если вы использовали NSURLConnection для загрузки XML (возможно, вы упростили его здесь для целей демонстрации), есть проблемы с использованием NSURLConnection в фоновом режиме. Но если вы используете dataWithContentsOfURL (или лучше, NSXMLParser метод initWithContentsOfURL), это не будет проблемой.

  2. Похоже, что вы загружаете один XML, но если вы одновременно загружали несколько источников XML, вы должны понимать, что многие серверы накладывают ограничение на количество параллельных подключений, которые они позволят от одного клиента. Вы можете использовать NSOperationQueue свойство maxConcurrentOperationCount, чтобы смягчить эту проблему. Четыре - это типичное значение.


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

  • , если у вас уже есть xml вам не нужно создавать новый imagen;

  • вы должны, вероятно, releasequeue объект после добавления operation, или если вам нужно, чтобы сохранить его, чтобы использовать его, вы должны сделать его класс свойств или экземпляра переменной;

  • вы могли бы избавиться от operation полностью, если вы сделали:

    [queue addOperationWithBlock:^{ 
        [self loadDataWithOperation]; 
    }]; 
    
  • вы должны release на parser объект, когда вы сделали с ним;

  • если вы держите imagen в своем коде, вы также должны release его когда это сделать; и

  • вы не должны releaseimg объект так imageWithData возвращает ответ autorelease объект

Рутинное материал управления памятью, вероятно, следует отметить, для вас, если вы сделали статический анализ (выберите «Анализ» из меню «Продукт»).

Одно последнее замечание:

  • Я заметил, что у вас есть:

    NSData *xmlData = [NSData dataWithContentsOfURL:url1]; 
    NSXMLParser *parser = [[NSXMLParser alloc]initWithData:xmlData]; 
    

    Очевидно, что xmlData не нужно, потому что вы могли бы также просто сделали:

    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url1]; 
    
+0

спасибо за ваш ответ, XML br правильное изображение, если я поставил Self.View = img-переменную, которая содержит изображение, я загружаю изображение во весь экран, проблема в том, когда я пытаюсь загрузить изображение UIImageView или обновить, чтобы он мог отображать правильное изображение , sii запускает тот же код в основном потоке, что и представление UIImage sii me загружается должным образом. –

+0

@ LaurxsSepeda Я боюсь, что не понимаю вас, но мой совет будет таким же. Либо установите контрольные точки и один шаг через свой код, по очереди, чтобы выяснить, в какой строке вы не получаете нужный результат, или помещаете в тонну инструкций NSLog, после каждого присваивания переменной, чтобы фигурировать что происходит. – Rob

+0

@LaurxsSepeda Кстати, есть две возможные проблемы в фоновом загрузке XML, о котором я упоминаю в своем пересмотренном ответе. Исходя из вашего вопроса, они кажутся маловероятными, но это нужно учитывать. – Rob

Смежные вопросы