[英]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
(我假设currentElement
是NSString
因为您在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.