Возвращает массив в какао, но ожидает завершения делегирования - PullRequest
0 голосов
/ 30 июля 2009

Я создал следующий метод в какао:

-(NSArray *)latestData
{
    NSURL *requestingURL = [NSURL URLWithString:@"someRestfulURL"];

    NSMutableURLRequest *theRequest =[NSMutableURLRequest requestWithURL:requestingURL];
    [theRequest setHTTPMethod:@"GET"];

    NSURLConnection *theConnection = [NSURLConnection connectionWithRequest:theRequest delegate:self];

    if(theConnection)
    {
        webData = [[NSMutableData data]retain];
    }
    else
    {
        NSLog(@"the connection is NULL");
    }
    return someArray;
}

Веб-служба RESTful, которую я вызываю, возвращает XML, который я анализирую с помощью NSXMLParser.

Как я могу вернуть массив при вызове latestData, если мне нужно дождаться завершения методов делегата NSURLConnection и NSXMLParser, прежде чем я смогу заполнить массив соответствующими данными?

Ответы [ 2 ]

1 голос
/ 30 июля 2009

[NSXMLParser parse] не возвращается до тех пор, пока синтаксический анализ не будет завершен, поэтому у него уже есть необходимое поведение, а NSURLConnection имеет sendSynchronousRequest: returningResponse: error: для синхронных запросов.

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

1 голос
/ 30 июля 2009

Мало что можно сделать 1. Сделайте запрос синхронным, таким образом у вас будет массив во время возврата. 2. Если вы хотите сделать его асинхронным, вместо того, чтобы возвращать массив, укажите массив в качестве члена класса и заполните его методом делегата законченного запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...