FreePascal / Lazarus и реализация nsurlconnectiondatadelegate - PullRequest
0 голосов
/ 27 мая 2018

Я пытаюсь реализовать 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)выдает фатальную компиляцию без дальнейшего сообщения об ошибке.Я полагаю, потому что они как-то сталкиваются, но не уверены, как определить их по-другому?
...