Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用NSXMLParser检索的数据填充NSMutableArray时出现问题_Ios_Xcode_Nsmutablearray_Nsxmlparser - Fatal编程技术网

Ios 使用NSXMLParser检索的数据填充NSMutableArray时出现问题

Ios 使用NSXMLParser检索的数据填充NSMutableArray时出现问题,ios,xcode,nsmutablearray,nsxmlparser,Ios,Xcode,Nsmutablearray,Nsxmlparser,我正在开发我的第一款有点严肃的iOS应用程序,我对Xcode、iOS和Objective-C都是新手。我一直在关注,并在iTunesU上完成了斯坦福iOS课程的前几个作业。除此之外,我没有经验 总之,我使用NSXMLParser解析从internet检索的XML文件,然后尝试创建UGStory对象来表示一些数据,并将它们添加到NSMutableArray中 编辑:我对代码做了一些更改,并在这里进行了更新。现在我确信我的NSXMLParser函数有问题。现在,当程序执行时,数组中有30个对象,但当

我正在开发我的第一款有点严肃的iOS应用程序,我对Xcode、iOS和Objective-C都是新手。我一直在关注,并在iTunesU上完成了斯坦福iOS课程的前几个作业。除此之外,我没有经验

总之,我使用NSXMLParser解析从internet检索的XML文件,然后尝试创建UGStory对象来表示一些数据,并将它们添加到NSMutableArray中

编辑:我对代码做了一些更改,并在这里进行了更新。现在我确信我的NSXMLParser函数有问题。现在,当程序执行时,数组中有30个对象,但当我检查数组时,每个对象都会显示“超出范围”和“摘要不可用”

此外,此数据还用于填充拆分视图控制器。标题进入主视图,链接用于填充详细视图。但在这执行之后,主控中只有一件事;“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
在这一行:

_stories = [_stories initWithCapacity:10];
你可能是说:

_stories = [[NSMutableArray alloc] initWithCapacity:10];
nil
数组中,忽略所有
addObject:
消息

在结束元素后,您永远不会
nil
\u currentTag

将此代码添加到
didEndElement:

[_currentTag release];
_currentTag = nil;

它应该会像你期望的那样工作。

好的,谢谢你。这肯定是一个问题,但光是解决这个问题对我来说是行不通的。我已经编辑了代码和我的操作。任何进一步的帮助都将非常感谢。好的,谢谢。我有点怀疑。我不能使用release,因为我正在进行自动引用计数,如果我只是将其设置为nil,会有相同的效果吗?我以前尝试过使用setString消息而不是在foundCharacters中使用appendString来纠正这个错误,但没有成功。它现在似乎起作用了,但我还不能完全确定。谢谢Inglese的帮助。我还不太习惯ARC,但我认为将它设置为零应该可以达到同样的效果。是的,我认为这很有效。今晚我没有时间去做所有的事情和彻底的测试,但明天我会,我会根据结果编辑我的OP。再次感谢你的帮助。