2012-07-27 61 views
2

我更新为xcode 4.4(与苹果LLVM编译器4.0),并从那时起,当我尝试在控制台xcode和应用程序(在模拟器)块用户打印XML互动...我需要等待30秒或更长时间直到完成(我什么都不能做)苹果LLVM编译器4.0冻结Xcode和应用程序时打印XML(NSLog)

我使用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); 
      } 
     } 
    }]; 
+0

XML有多大? (log'[responseObject length]')。 – trojanfoe 2012-07-27 11:10:41

+0

[响应对象长度] 44419 – silvaric 2012-07-27 11:15:18

回答

2

这个问题似乎是由4.4.1固定在2012/8/7释放。

+0

是的,那真的:)谢谢 – silvaric 2012-08-08 15:29:28

+0

固定对我也:) – banDedo 2012-08-08 18:38:45

1

如果需要日志调试(或错误报告)的响应,那么我认为你应该写responseObject在高速缓存目录中的文件(或其他等效文件夹的iOS下,如果是O/S)。然后你可以访问这个文件来看看响应是什么。唯一需要克服的问题是如何避免文件夹过大;也许应用程序启动时或定期删除所有以前编写的文件。

您可以使用[NSData writeToURL:atomically:]方法编写响应,这会更快,因为它不需要先转换为字符串。

+0

没有工作:(,我已经尝试writeToURL或writeToFile ..用stringWithContentsOfURL加载,并且问题继续 – silvaric 2012-07-27 12:02:21

+0

你是说,当你写'responseObject'而不将它转换为字符串时,它仍然冻结? – trojanfoe 2012-07-27 12:07:32

+0

嗡嗡声...可能我做错了,所以我定义URL的路径和写入[数据XML writeToURL:storeUrl原子:是]我加载后[NSString stringWithContentsOfURL:storeUrl编码:NSASCIIStringEncoding错误:&错误]或[NSData dataWithContentsOfURL :storeUrl]但仍然冻结在两种方式 – silvaric 2012-07-27 12:14:44

2

我目前遇到同样的问题。每当我NSLog一个大字符串,我只看到XCode和模拟器挂起(沙滩球)。但是如果我等2-3分钟,应用程序将继续。

似乎与4.4 XCode的一个bug,和其他开发者报告了相同的行为: http://openradar.appspot.com/11972490

+0

谢谢!的信息,这是完全一样的问题... – silvaric 2012-08-01 15:23:34