runModalForWindow регулирует запросы http - PullRequest
4 голосов
/ 14 февраля 2011

У меня есть URL-соединение, которое нормально работает

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
                                                              delegate:delegate];

Но когда я создаю модальное окно, ни один запрос не получает ответа:

[NSApp runModalForWindow:window];

Если я закомментирую эту строку, создав, таким образом, «стандартное» окно, все будет работать.

Я пытался реализовать все методы из NSURLConnectionDelegate, ни один из них не вызывался.

Я подозреваю, что это что-то вроде «запуска циклов», но у меня мало опыта в этой области. У кого-нибудь есть опыт в этом?

Спасибо

Ответы [ 3 ]

8 голосов
/ 14 февраля 2011

Если вы нацелены на 10,5+, вы можете указать NSURLConnection также запускать в NSModalPanelRunLoopMode (режим, в котором был бы текущий цикл выполнения вашего потока при представлении модального представления) через

-(void)scheduleInRunLoop:(NSRunLoop *)aRunLoop forMode:(NSString *)mode

, где aRunLoop, вероятно, будет [NSRunLoop currentRunLoop], а mode будет NSModalPanelRunLoopMode. Больше информации в NSURLConnection doc .

Если вы поддерживаете более ранние ОС, вам, возможно, придется проявить творческий подход (т. Е. С многопоточностью). Хорошее обсуждение этого вопроса предварительно 10,5 здесь .

1 голос
/ 24 апреля 2011

Я также столкнулся с той же проблемой, что не вызывал метод делегата при использовании NSURLConnection в модальном окне.

после некоторого расследования, следующий код разрешит его.

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

Однако, когда вызывается connectionDidFinishLoading, [NSApp stopModal] не работает, вместо этого необходимо вызвать [NSApp abortModal].

1 голос
/ 14 февраля 2011

Я не сталкивался с ситуацией, в которой вы находитесь, но я предлагаю порождать и запускать соединение в фоновом потоке.

...