2

xcode 4.4 (Apple LLVM コンパイラ 4.0 を使用) に更新し、それ以来、コンソールで XML を印刷しようとすると、xcode とアプリ (シミュレーター) がユーザーの操作をブロックします...そして、終了するまで 30 秒以上待つ必要があります (できます)。何もしません)

AFNetworking と TBXML を使用していますが、解析を削除すると問題が継続するため、問題は解析されません。

だから私はNSOperationQueue、NSBlockOperation、グランドディスパッチセントラルを試してみます...そして何も、まだフリーズしています。

XMLが大きすぎるからですか??? (...デバッグとテストのために XML を出力する必要があります)

1º Request と print 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);
            }
}

「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 に答える
1

デバッグ (またはエラー報告) のために応答をログに記録する必要がある場合responseObjectは、caches ディレクトリ (または iOS の下にある同等のフォルダーが O/S の場合) 内のファイルに書き込む必要があると思います。次に、このファイルにアクセスして、応答が何であったかを確認できます。その場合に克服すべき唯一の問題は、フォルダーが大きくなりすぎないようにする方法です。おそらく、アプリの起動時または定期的に、以前に書き込まれたファイルをすべて削除します。

メソッドを使用して応答を書き込むことができます[NSData writeToURL:atomically:]。最初に文字列に変換する必要がないため、これはより高速です。

于 2012-07-27T11:16:21.703 に答える