Компилятор Apple LLVM 4.0 замораживает xcode и приложение при печати XML (NSLog)

Я обновляю для xcode 4.4 (с компилятором Apple LLVM 4.0) и с тех пор, когда я пытаюсь напечатать XML в консоли, xcode и приложение (в симуляторе) блокируют взаимодействие с пользователем... и мне нужно подождать 30 секунд или больше, пока не закончится (я могу ') ничего не делать)

Я использую AFNetworking и TBXML, но проблема не в разборе, потому что, если я удаляю разбор, проблема продолжится.

Так что я пробую NSOperationQueue,NSBlockOperation, центральный диспетчерский пункт... и ничего, все еще зависать.

Это потому, что XML слишком большой??? (... мне нужно распечатать XML для отладки и тестирования)

1º Запрос и распечатка XML

- (void) doRequestPOST:(NSString*)URL params:(NSString*)params withSuccess:(void(^)(BOOL,id))successBlock{

(....)

AFHTTPRequestOperation *op = [sharedAPI HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) {

            NSString* xml = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

            //>>>>>PROBLEM HERE<<<<< if i remove next line (nslog) the problem does not occur
            NSLog(@"\n\nResponse \nURL :\n%@\nXML :\n%@\n \n",operation.request.URL,xml);
            [xml release];

            TBXML * tbxml = [TBXML newTBXMLWithXMLData:responseObject error:nil];
            [self saveCookiesFromHTTPHeaderFields:[operation response] withTBXML:tbxml.rootXMLElement];

            if (successBlock) {
                successBlock(TRUE,responseObject);
            }
}

2º Будет запрашивать запрос и анализировать ответ из "successBlock(TRUE,responseObject);"

[self doRequestPOST:stringURL params:nil withSuccess:^(BOOL success, id response) {

        if (success) {

            //will parse response

            [self.dictionaryCategoryContents setObject:[Parser parseVodContent:response] forKey:idCategory];
            if (responseBlock){
                responseBlock (YES,[dictionaryCategoryContents objectForKey:idCategory]);
            }

        }else {

            if (responseBlock){
                responseBlock (NO,response);
            }
        }
    }];

3 ответа

Решение

Эта проблема, кажется, исправлена ​​в 4.4.1, выпущенном 7/8/2012.

В настоящее время я сталкиваюсь с той же проблемой. Всякий раз, когда я запускаю большую строку, я просто вижу XCode и зависание симулятора (пляжный мяч). Но если я подожду 2-3 минуты, приложение продолжится.

Кажется, в XCode 4.4 есть ошибка, и другие разработчики сообщили о том же поведении: http://openradar.appspot.com/11972490

Если вам нужно записать ответ для отладки (или сообщения об ошибках), то я думаю, что вы должны написать responseObject к файлу в каталоге caches (или любой другой эквивалентной папке под iOS, если это O/S). Затем вы можете получить доступ к этому файлу, чтобы увидеть ответ. Единственная проблема, которую нужно преодолеть, - это как сохранить папку слишком большой; возможно, удалите все ранее записанные файлы при запуске приложения или через равные промежутки времени.

Вы можете написать ответ, используя [NSData writeToURL:atomically:] метод, и это будет быстрее, так как он не требует преобразования в строку в первую очередь.

Другие вопросы по тегам