2

我更新了 xcode 4.4(使用 Apple LLVM 编译器 4.0),从那时起,当我尝试在控制台中打印 XML 时,xcode 和应用程序(在模拟器中)会阻止用户交互......我需要等待 30 秒或更长时间才能完成(我可以'什么都不做)

我正在使用 AFNetworking 和 TBXML,但问题不在解析中,因为如果我删除解析,问题还会继续。

所以我尝试了 NSOperationQueue、NSBlockOperation、grand dispatch central ......什么也没有,仍然冻结。

是因为 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);
            }
        }
    }];
4

3 回答 3

2

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

XCode 4.4 似乎存在错误,其他开发人员报告了相同的行为: http: //openradar.appspot.com/11972490

于 2012-08-01T03:13:22.283 回答
2

2012 年 8 月 7 日发布的 4.4.1 似乎修复了这个问题。

于 2012-08-07T23:48:23.110 回答
1

如果您需要记录调试响应(或错误报告),那么我认为您应该将其写入responseObject缓存目录中的文件(或 iOS 下的任何等效文件夹,如果那是 O/S)。然后您可以访问此文件以查看响应是什么。唯一需要克服的问题是如何防止文件夹变得太大;可能会在应用程序启动时或定期删除所有先前写入的文件。

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

于 2012-07-27T11:16:21.703 回答