Компилятор 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:]
метод, и это будет быстрее, так как он не требует преобразования в строку в первую очередь.