Эй, ребята, я проделал большую работу с ASIHTTPRequest до сих пор и использую его несколько раз в своем приложении ios, однако в одной области моего приложения, где я добавил другой метод asihttprequest, он не работает должным образом.
Прежде всего необходимо сказать, что причина, по которой я пытаюсь распределить нагрузку по загрузке и анализу данных. Если я делаю это в подпредставлении, потребуется 2-3 секунды, чтобы пройти второй лист XML и получитьвсе связанные значения ... где, если я делаю это на этом главном экране, где люди ничего не видят, загружают и т. д., то при возвращении к подпредставлению это должно выглядеть почти мгновенно.Я не знаю, насколько это правильно, но я полагаю, что это нормально, чтобы приложение чувствовало себя abit snappier.
Так что я устанавливаю методы asihttprequest идентично другим, которые работают без кеширования.
Что происходит, я выбираю ячейку таблицы в главном представлении, которая загружает второе представление и анализирует кучу информации в представлении таблицы.Пользователь затем выбирает значение, которое передается обратно в основной вид и отображается.
Затем я анализирую другую партию XML-данных, проверяя выбранный valueID по всему на втором листе XML.так что когда пользователь выбирает вторую ячейку, я передаю все данные, которые были только что проанализированы, во второе представление, чтобы оно выглядело так, как будто его загружается намного быстрее.
Вот блок-схема, которая объяснит, что яя пытаюсь сделать abit лучше 
Вот так выглядит код синтаксического анализатора на главном экране, который работает в эмуляторе, но не на 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 для других представлений, кроме того, что я инициализирую его из протокола, который я настраиваю из второго представления ... возможно, я должен установить значения, прежде чем перезагрузитьстол или что-то ... Я не уверен, хотя, надеюсь, кто-то может помочь мне с этим и определить проблему, которую я не вижу.