Я пытаюсь реализовать nsurlconnectiondatadelegate, так как мне нужно поддерживать асинхронный режим - в синхронном режиме перенаправления выполняются автоматически, чего я не хочу.
Для справки у меня есть код, работающий в синхронном режиме с urlRequest и т. Д.
Фрагменты кода
{$mode objfpc}
{$modeswitch objectivec1}
{$modeswitch objectivec2}
...
// We need to implement support for NSURLConnectionDelegate and NSURLConnectionDataDelegate
TmsMacRequestDelegate = objcclass(NSObject)
public
// this will set flag when done
procedure connectionDidFinishLoading(ANSUC: NSURLConnection); message onnectionDidFinishLoading:'; override;
// ... implement rest?
end;
...
requestDelegate := TmsMacRequestDelegate.alloc.init;
urlConnection := NSURLConnection.connectionWithRequest_delegate(urlRequest, requestDelegate);
// ... setup flag
urlConnection.start;
// ... wait here in loop checking flag set by "finish loading"
...
С учетом вышесказанного, первоначальное тестирование кажется не очень удачным.Мы достигаем urlConnection.start;но connectionDidFinishLoading никогда не вызывается.
Моя теория состоит в том, что это может быть потому, что мы не полностью реализуем делегата.Тем не менее, это вызывает у меня некоторые вопросы - фрагмент кода:
procedure connectionDidFinishLoading(ANSUC: NSURLConnection); message 'connectionDidFinishLoading:'; override;
procedure connection(ANSUC: NSURLConnection; didReceive: NSURLResponse); message 'connection::';
procedure connection(ANSUC: NSURLConnection; didReceive: NSData); message 'connection::';
procedure connection(ANSUC: NSURLConnection; didSendBodyData: Integer; totalBytesWritten: Integer; totalBytesExpectedToWrite: Integer); message 'connection::::';
procedure connection(ANSUC: NSURLConnection; willSend: NSURLRequest; redirectResponse: PNSURLResponse); message 'connection:::';
procedure connection(ANSUC: NSURLConnection; willCacheResponse: NSCachedURLResponse); message 'connection::';
- В одну функцию я перевел NSURLResponse?как указатель на NSURLResponse ... Но не уверен, что здесь правильно?
- Я не уверен, почему я соответственно компилятору должен использовать «override» только для первой функции.Насколько я могу судить - ни одна из функций не реализована в NSObject?
- В тот момент, когда я определил компилятор соединения (ANSUC: NSURLConnection; didReceive: NSData) и соединения (ANSUC: NSURLConnection; didReceive: NSURLResponse)выдает фатальную компиляцию без дальнейшего сообщения об ошибке.Я полагаю, потому что они как-то сталкиваются, но не уверены, как определить их по-другому?