質問

参照:

Objective-Cの非同期ユーザーのウェブリクエストやクッキー

私は日このコードは誰でもできるので教えて何が違う。

WSHelperから継承されNSObjectいたNSDocumentとNSObjectControllerも..

-(void) loadUrl: (NSString*) urlStr{
    url = [[NSURL alloc] initWithString:urlStr];
    request = [NSURLRequest requestWithURL:url cachePolicy: NSURLRequestReloadIgnoringCacheData timeoutInterval: 60.0];
    connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
    if(connection)
    {
        receivedData = [[NSMutableData data] retain];
            //[connection start];
    }
    else
    {       display error etc...   }
    NSApplication * app = [NSApplication sharedApplication];
    [app runModalForWindow: waitWindow];// <-- this is the problem...
}

-(void)connection: (NSURLConnection*)connection didReceiveData:(NSData*)data{
    progressText = @"Receiving Data...";
    [receivedData appendData:data];
}

-(void)connection: (NSURLConnection *)connection didFailWithError:(NSError *)error{
    progressText = @"Error...";
    NSAlert * alert = [[NSAlert alloc] init];
    [alert setMessageText:[error localizedDescription]];
    [alert runModal];
}


- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
    progressText = @"Done...";
    pData = [[NSData alloc] initWithData:receivedData];
    [self hideWindow];
}

このコードだけで見ないのだが進展。もう/なしstartImmediatelyありですよー。, この実行にメインウィンドウでのスレッドと実行ループが実行が成功しました。

また声の同期要求、できることを期待しています。正しく!!思いつasyncます。

いCoreServices.枠組みのプロジェクトがなくなったことであり、すっき加についてお教え下さい。コンパイラの設?またはいけないのは初期化にも前に利用できまNSURLConnection?

会社の動きをタイムリー走NSURLConnection異なるスレッドに、独自のNSRunLoop、Objective-CおよびMACの開発にはサンプルコードも書類が全てが難しいのです。

役に立ちましたか?

解決

まずん接続開始に感謝したいと思います。変更:

connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]

削除 [connection start].現在:

  • はアプリの絶の実行ループの普通?NSURLConnectionが必要です。
  • ができているのですが、同期負荷のURLか?
  • のデバッガができること url は何を期待していることの表れであるのでしょうか?何ですか?
  • できるだけ登録を直接解除WSHelperる前に、代表メッセージとはなんでしょう。NSURLConnectionはasynchoronous。

ない特別の利用NSURLConnectionでの率直な部分の枠組み特別なコンパイラの設定が必要です。な初期化を使用してください。います。ないでください開始を求うもののように持ち込みCoreServices.枠組み

としてのリクエストを送信する同期の作品として行われているお取り扱いは非同期になる。でき:

  • のrunloopは走らない NSDefaultRunLoopMode に接続できない予定です。
  • その他の部分のコードを呼び出し -cancel に接続する前にはチャンスを負荷時のものです。
  • お管を修復させようとするとエラーが接続する前にはチャンスを負荷時のものです。

現実問題として

ああ、実際いただきました、実現います。お話:

-[NSApp runModalForWindow:]

解説を読むようにこのメソッドは.な走行を実行ループのように NSURLConnection ます。いと思うんうまいを提供するとウィンドウもこのような走りながらURL接続します。

いますことを示唆して実施し -connection:didReceiveResponse: 委譲方法です。確認したいここでどんなことをやっているのか、その国の状況コードです。

他のヒント

私はまた、モーダルウィンドウでNSURLConnectionを使用するときに呼び出されるデリゲートメソッドを取得していない同じ問題を満たしています。

いくつかの調査の後、コードの解決以下のこと。

NSURLConnection* conn = [[NSURLConnection alloc] initWithRequest:requst delegate:self startImmediately:NO];
[conn scheduleRunLoop:[NSRunLoop currentRunLoop] forMode:NSModalPanelRunLoopMode];
[conn start];

は、しかし、と呼ばれるconnectionDidFinishLoadingとき、[NSApp stopModal]が動作しません、代わりに[NSApp abortModal]呼び出す必要があります。

あなたはモーダルダイアログでこれを使用していると言いますか?モーダルダイアログは、異なるモードに実行ループを置きます。あなたは、これは通常の実行ループモードに加えて、モーダルダイアログ実行ループモードで実行するようにスケジュールすることで、仕事を得ることができるはずです。あなたはconnectionloadURL:を配分した後のコード行を追加してみてください。

[connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSModalPanelRunLoopMode];

希望に役立ちます。

どのようにそれは何もしていません知っているのですか?コンパイル時にエラーや警告メッセージがありますか?プログラムが実行されている場合、コンソール上に表示されるエラーメッセージがありますか?

あなたのコードにブレークポイントを設定し、あなたが起こっされることを期待するものを通じて、次の試みることがありますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top