Я работаю над своим первым довольно серьезным приложением для iOS, и я новичок в Xcode, iOS и Objective-C. Я следовал за ним и выполнил первые несколько заданий из iOS-класса Стэнфорда в iTunesU. Кроме этого у меня нет опыта.
В любом случае, я использую NSXMLParser для анализа XML-файла, полученного из Интернета, а затем пытаюсь создать объекты UGStory для представления некоторых данных и добавить их в NSMutableArray.
РЕДАКТИРОВАТЬ: я внес некоторые изменения в код и обновил его здесь. Теперь я уверен, что есть проблема с моими функциями NSXMLParser. Теперь, когда программа выполняется, я получаю 30 объектов в массиве, но когда я проверяю массив, каждый объект говорит «Out of Scope» и «Summary Unavailable».
Кроме того, эти данные используются для заполнения контроллера разделенного представления. Заголовки идут в masterview, ссылки используются для заполнения подробного просмотра. Но после этого в мастере остается только одна вещь; "News @ Ultimate-Guitar.Com"
Это первый текст, заключенный в заголовки, и на данный момент заголовок еще не встречен. Из-за этого у меня не должно быть объектов UGStory, поэтому я смущен тем, как устанавливается эта ячейка. Также все в массиве "вне области видимости", так откуда контроллер получает эти данные? Контроллер не делает ничего, кроме как создать UGFeedReader и отправить ему сообщение parseFeed.
#import "UGFeedReader.h"
@implementation UGFeedReader
@synthesize currentTag = _currentTag;
@synthesize stories = _stories;
@synthesize read = _read;
@synthesize i = _i;
- (void)parseFeed
{
NSURL* ugFeed = [NSURL URLWithString:@"http://www.ultimate-guitar.com/modules/rss/news.xml.php"];
NSXMLParser* feedParser = [[NSXMLParser alloc]initWithContentsOfURL:ugFeed];
_stories = [[NSMutableArray alloc] initWithCapacity:10];
_i = 0;
_read = NO;
[feedParser setDelegate:self];
[feedParser parse];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
if ([elementName isEqualToString:@"item"])
{
_read = YES;
UGStory* temp = [[UGStory alloc] init];
[_stories addObject:temp];
}
return;
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (!_currentTag)
{
_currentTag = [[NSMutableString alloc] init];
}
[_currentTag appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if (_read == YES)
{
if ([elementName isEqualToString:@"title"]) {
UGStory* temp = [_stories objectAtIndex:_i];
temp.title = _currentTag;
}
if ([elementName isEqualToString:@"link"]) {
UGStory* temp = [_stories objectAtIndex:_i];
temp.url = [NSURL URLWithString:_currentTag];
_read = NO;
_i++;
}
}
return;
}
@end