как получить данные из URL в iphone - PullRequest
0 голосов
/ 16 августа 2011

Я новый разработчик iPhone. Мне нужно получить имена по этому URL

Любой URL API

в табличном представлении. Как я могу это сделать, помогите мне.Я пытаюсь сделать это, установив соединение, но оно показывает ошибку тайм-аута HTTP. В чем причина и есть какой-то другой способ получить данные?

вот мой код соединения ...

static NSString *feedURLString =
> @"http://www.XXXXX.com/XXXXXX/api/XXXXX.php?method=All";

>     NSURLRequest *studentURLRequest =[NSURLRequest requestWithURL:[NSURL URLWithString:feedURLString]];

>self.studentFeedConnection =[[[NSURLConnection alloc] initWithRequest:studentURLRequest
> delegate:self] autorelease]; 
NSAssert(self.studentFeedConnection != nil, @"Failure to create URL connection."); 
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

> [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(addstudent:)    name:kAddstudentNotifm object:nil];

>[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(studentError:) name:kstudentErrorNotif object:nil];

> - (void)connection:(NSURLConnection *)connection
> didReceiveResponse:(NSURLResponse *)response { NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;

> if ((([httpResponse statusCode]/100) == 2) && [[response MIMEType]
> isEqual:@"application/atom+xml"]) {
>  self.studentData = [NSMutableData data];
>  } 
else {
>         NSDictionary *userInfo = [NSDictionary dictionaryWithObject:NSLocalizedString(@"HTTP Error", @"Error message
> displayed when receving a connection error.")
>                                                             
> forKey:NSLocalizedDescriptionKey];

NSError *error = [NSError errorWithDomain:@"HTTP" code:[httpResponse statusCode]userInfo:userInfo];

> [self handleError:error];

>} 
}
> 
> - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
> [studentData appendData:data]; 
}
> 
> - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
>     [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

> if ([error code] == kCFURLErrorNotConnectedToInternet) {
>         // if we can identify the error, we can present a more precise message to the user.
> NSDictionary *userInfo = [NSDictionary dictionaryWithObject: NSLocalizedString(@"No Connection Error", @"Error message displayed when not connected to the Internet.")forKey:NSLocalizedDescriptionKey];

>NSError *noConnectionError = [NSError errorWithDomain:NSCocoaErrorDomain code:kCFURLErrorNotConnectedToInternet userInfo:userInfo];
> [self handleError:noConnectionError];
>} 
else {
>// otherwise handle the error generically
>[self handleError:error];
>}
> self.studentFeedConnection = nil;
}

Ответы [ 2 ]

2 голосов
/ 16 августа 2011

Попробуйте использовать NSXMLParser

NSString *site = [NSString stringWithString:
    @"http://www.XXXXX.com/XXX/api/XXXX.php?method=All"];
NSURL *url = [NSURL URLWithString:site];
NSXMLParser *myparser =  [NSXMLParser initWithContentsOfURL:url];
myparser.delegate = self;
[myparser parse];

Убедитесь, что реализовали

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI  qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict;

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError;

- (void) parserDidEndDocument:(NSXMLParser *)parser;

После того, как данные проанализированы в NSArray или NSDictionary, вы можете использовать их в качестве источника данных в UITableView

0 голосов
/ 16 августа 2011

Если вы получаете ошибку HTTP, скорее всего, с вашим соединением что-то не так.Требуется ли для вашего соединения аутентификация?Если это так, вам нужно реализовать:

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
{
    NSURLCredential *myCreds = [[NSURLCredential alloc] initWithUser:@"**USERNAME**" password:@"**PASSWORD**" persistence:NO];

    [challenge.sender useCredential:myCreds forAuthenticationChallenge:challenge];
    [myCreds release];
}

Что касается фактического извлечения данных, как вам потребуется использовать NSXML Parser, вы можете увидеть подробности для этого здесь: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/Reference/Reference.html. Есть только3 метода, которые вы ДОЛЖНЫ реализовать, остальные - просто бонус.Три из них:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI  qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict;

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName;

В идеале вы знаете структуру XML-файла, который вы анализируете, поскольку вам потребуется идентифицировать имя элемента / атрибута в приведенных выше функциях.Затем вы можете хранить ваши данные в массиве, или как вам удобно.

У вас также есть возможность использовать сторонний парсер, здесь есть очень хорошее объяснение / сравнение различных доступных парсеров: http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project

Надеюсь, это поможет!

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