繁体   English   中英

iphone - web 服务返回 XML

[英]iphone - web service returns XML

我对 iPhone 开发非常陌生,所以请对我温柔一点。 我设置了一个 web 服务,它返回 XML 数据。 样本数据:

<categories>
    <category>
        <CategoryId>1</CategoryId>
        <CategoryName>cat1</CategoryName>
    </category>
    <category>
        <CategoryId>2</CategoryId>
        <CategoryName>cat2</CategoryName>
    </category>
</categories>

我正在处理此处提供的代码: http://gigaom.com/apple/tutorial-build-a-simple-rss-reader-for-iphone/我收到错误消息。 这是设置数组的 function:

    -(void)parser: (NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    NSLog(@"ended element: %@", elementName);
    if([elementName isEqualToString:@"category"])
    {
        [category setObject:currentID forKey:@"CategoryId"];
        [category setObject:currentName forKey:@"CategoryName"];
        [categories addObject:[currentElement copy]];
    }
}`-(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    NSLog(@"Found characters: %@", string);
    if([currentElement isEqualToString:@"CategoryName"])
    {
        [currentName appendString:string];
    }
    else if([currentElement isEqualToString:@"CategoryId"])
    {
        [currentID appendString:string];
    }
}

当我尝试从数组中读取时出现错误:

 (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *MyIdentifier = @"MyIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if(cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
    }
    int categoryIndex = [indexPath indexAtPosition: [indexPath length] -1];
    [cell.textLabel.text = [categories objectAtIndex: categoryIndex] objectForKey: @"CategoryName"];
    return cell;


}

我收到此错误:

2011-06-05 11:33:35.436 FirstTry[2419:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFString objectForKey:]: unrecognized selector sent to instance 0x4c26b40'

我对 iOS 开发的东西有点迷茫。 谢谢!

“无法识别的选择器发送到实例......”错误的原因是您正在调用 function 到一个没有实现 function 的实例。

您假设cellForRowAtIndexPath: usedLocalVariableName:Class

categories:NSArray包含许多category:NSMutableDictionary ,其中包含@"CategoryName" -Key 和NSString值。

您的 Parse-Code 会产生不同的结果:

categories:NSArray包含许多currentElement:NSString (我假设currentElementNSString因为您在currentElement上使用isEqualToString: -method)。

因此,如果您运行该代码,代码片段: [categories objectAtIndex: categoryIndex]将返回一个NSString不是NSDictionary并且NSString不实现objectForKey: -方法。

我不确定(我没有测试过),但我认为

[categories addObject:[[category copy] autorelease]];

应该管用。 自动释放是针对内存泄漏的

另一件事:你使用

int categoryIndex = [indexPath indexAtPosition: [indexPath length] -1];

为什么不使用int categoryIndex = indexPath.row

编辑:您正在使用 NSXMLParser。 我正在使用TBXML -Parser,它的解析速度比 NSXML 快,而且使用起来更舒服。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM