3

MBProgressHUDをインジケーターとして使用しています。そして、他のメソッドを実行しているときに別のスレッドを使用していることがわかります。を使用したいのですがNSURLConnection、委任が正しく呼び出されません。

ここに私が持っているもの(@implementationファイル):

- (void)viewDidLoad {
    [super viewDidLoad];
    [self hudShowWithLabel];
}

-(void)hudShowWithLabel {
    HUD = [[MBProgressHUD alloc] initWithView: self.view];
    [self.view addSubview:HUD];

    HUD.delegate = self;
    HUD.labelText = @"Loading";
    [HUD showWhileExecuting:@selector(myTask) onTarget:self withObject:nil animated:YES];
}

-(void)myTask {
    responseData = [NSMutableData data];
    NSLog(@"Is%@ main thread", ([NSThread isMainThread] ? @"" : @" NOT"));
    NSString *requestURL = @"http://someurl";

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:requestURL]];
    (void)[[NSURLConnection alloc] initWithRequest:request delegate: self];    
}

myTask実行中、 にないことがわかりMainThreadます。どうすればこの問題を解決できますか?

4

2 に答える 2

2

メインスレッドで NSURLConnection を開始できます。

[self performSelectorOnMainThread:@selector(start) withObject:nil waitUntilDone:YES];

そして、セレクターの開始は次のとおりです。

- (void)start
{
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:requestURL]];

    self.connection =[[NSURLConnection alloc] initWithRequest:request
                                                 delegate:self
                                         startImmediately:NO];
    [self.connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
    [self.connection start];
}

githubにも例があります。

于 2013-06-28T15:45:07.053 に答える
0

NSURLConnection は、実行ループを持つ必要がある別のスレッドで実行されます。スレッドのメイン メソッドに、次のような実行ループのコードを追加してみてください。

while (!finished)
{
  [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]];
}
于 2013-08-15T14:04:40.727 に答える