ASIHTTPRequest работает на эмуляторе, но не на iphone - PullRequest
2 голосов
/ 29 ноября 2011

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

Прежде всего необходимо сказать, что причина, по которой я пытаюсь распределить нагрузку по загрузке и анализу данных. Если я делаю это в подпредставлении, потребуется 2-3 секунды, чтобы пройти второй лист XML и получитьвсе связанные значения ... где, если я делаю это на этом главном экране, где люди ничего не видят, загружают и т. д., то при возвращении к подпредставлению это должно выглядеть почти мгновенно.Я не знаю, насколько это правильно, но я полагаю, что это нормально, чтобы приложение чувствовало себя abit snappier.

Так что я устанавливаю методы asihttprequest идентично другим, которые работают без кеширования.

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

Затем я анализирую другую партию XML-данных, проверяя выбранный valueID по всему на втором листе XML.так что когда пользователь выбирает вторую ячейку, я передаю все данные, которые были только что проанализированы, во второе представление, чтобы оно выглядело так, как будто его загружается намного быстрее.

Вот блок-схема, которая объяснит, что яя пытаюсь сделать abit лучше enter image description here

Вот так выглядит код синтаксического анализатора на главном экране, который работает в эмуляторе, но не на iphone.

Этоэто мой протокол, который я вызываю из подпредставления и передаю все значения, которые мне нужны, для перезапуска и запуска запроса в mainviews ASIHTTPRequest.

    - (void) setManufactureSearchFields:(NSArray *)arrayValues withIndexPath:(NSIndexPath *)myIndexPath
    {
        manufactureSearchObjectString = [[arrayValues valueForKey:@"MANUFACTURER"] objectAtIndex:0];
        manufactureIdString = [[arrayValues valueForKey:@"MANUID"] objectAtIndex:0]; //Restricts Models dataset
        manufactureResultIndexPath = myIndexPath;
        [self.tableView reloadData]; //reloads the tabels so you can see the value in the tableViewCell.
        //need some sort of if statment here so that if the back button is pressed modelSearchObjectString is not changed..

        if (oldManufactureSearchObjectString != manufactureSearchObjectString) {
            modelResultIndexPath = NULL;
            modelSearchObjectString = @"empty";
            oldManufactureSearchObjectString = [[NSString alloc] initWithFormat:manufactureSearchObjectString];
        }
//These two lines below are what execute ASIHTTPRequest and set up my parser etc
        dataSetToParse = @"ICMod"; // This sets the if statment inside parserDidEndDocument
        [self setRequestString:@"ICMod.xml"]; //Sets the urlstring for XML inside setRequestString

    }

Затем запускаются методы делегата ASIHTTPRequest.

- (IBAction)setRequestString:(NSString *)string
{
    //Set database address
    //NSMutableString *databaseURL = [[NSMutableString alloc] initWithString:@"http://127.0.0.1:8888/codeData/"]; // imac development
    NSMutableString *databaseURL = [[NSMutableString alloc] initWithString:@"http://127.0.0.1:8888/codeData/"]; // iphone development

    //PHP file name is being set from the parent view
    [databaseURL appendString:string];

    NSLog(@"%@", databaseURL);

    //call ASIHTTP delegates (Used to connect to database)
    NSURL *url = [NSURL URLWithString:databaseURL];

    //This sets up all other request
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

    [request setDelegate:self];
    [request startAsynchronous];

}

Когда я запускаю это через отладку с точками останова во время тестирования на iphone, это то место, где приложение падает, но на эмуляторе у него нет проблем.

Этот следующий метод никогда не вызывается при тестированиина iphone, но сладко работает на эмуляторе.

- (void)requestFinished:(ASIHTTPRequest *)request
{   
        responseString = [request responseString]; //Pass requested text from server over to NSString 
        capturedResponseData = [responseString dataUsingEncoding:NSUTF8StringEncoding]; 

        [self startTheParsingProcess:capturedResponseData];
}

Это единственный другой делегат, который запускается при тестировании на iphone, отправляетМне кажется, что время соединения истекло.

- (void)requestFailed:(ASIHTTPRequest *)request
{
    NSError *error = [request error];
    NSLog(@"%@", error);
    UIAlertView *errorAlert = [[UIAlertView alloc] initWithTitle:@"Error!" message:@"A connection failure occurred." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [errorAlert show];
}

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

вот что печатается в журнале ...

2011-11-29 14:38:08.348 code[1641:707] http://000.000.000.000:0000/codeData/second.xml
2011-11-29 14:38:18.470 code[1641:707] Error Domain=ASIHTTPRequestErrorDomain Code=2 "The request timed out" UserInfo=0x1e83a0 {NSLocalizedDescription=The request timed out}

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

Ответы [ 3 ]

3 голосов
/ 29 ноября 2011

Можете ли вы просмотреть 'http://127.0.0.1:8888/codeData/' с Safari на iPhone? Скорее всего, сервер недоступен из любых сетей, к которым подключен iPhone.

Если ваш iMac использует DCHP, возможно, что адрес изменился, поскольку вы изначально установили значение.

0 голосов
/ 29 ноября 2011

Не летайте вслепую, но используйте HTTP-прокси, например Charles , чтобы убедиться, что ваши запросы действительно выполняются и приводят к тому, что вы ожидаете.

0 голосов
/ 29 ноября 2011

Вы уверены, что в URL указан правильный регистр? Симулятор гораздо более снисходителен к чувствительности к регистру, чем само устройство.

...