【发布时间】:2014-02-24 05:40:18
【问题描述】:
我在做什么:解析 XML 以创建 NSManagedObject 子类并且总是解析失败。
代码在这里:
NSData* data = [[NSString stringWithUTF8String:answerString.c_str()] dataUsingEncoding:NSUTF8StringEncoding];
NSXMLParser *nsXmlParser = [[NSXMLParser alloc] initWithData:data];
XMLParser *parser = [[XMLParser alloc] initXMLParser];
[nsXmlParser setDelegate:parser];
BOOL success = [nsXmlParser parse];
其中answerString 是std::string。而且我总是在success 标志中获得NO。
我的对象类:
@interface System : NSManagedObject
@property (nonatomic, retain) NSString * systemFullName;
@property (nonatomic, retain) NSString * systemShortName;
@end
我的解析器头:
@class System;
@interface XMLParser : NSObject <NSXMLParserDelegate>
{
NSMutableString *currentElementValue;
System *system;
}
- (XMLParser *) initXMLParser;
及实施:
- (XMLParser *) initXMLParser
{
self = [super init];
return self;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:@"System"])
{
system = [NSEntityDescription insertNewObjectForEntityForName:@"System"
inManagedObjectContext:((AppDelegate*)[[UIApplication sharedApplication]
delegate]).managedObjectContext];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
if (!currentElementValue)
{
currentElementValue = [[NSMutableString alloc] initWithString:string];
} else
{
[currentElementValue appendString:string];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
NSManagedObjectContext *context = ((AppDelegate*)[[UIApplication sharedApplication]
delegate]).managedObjectContext;
if ([elementName isEqualToString:@"System"])
{
[context save:nil];
system = nil;
}
if ([elementName isEqualToString:@"systemFullName"])
{
system.systemFullName = currentElementValue;
}
if ([elementName isEqualToString:@"systemShortName"])
{
system.systemShortName = currentElementValue;
}
}
有什么想法吗?
我偶然发现,当方法 didEndElement 找到第一个对象的结尾时,XMLParser 会停止工作并出现错误 111。
【问题讨论】:
-
解析时遇到什么错误?
标签: ios objective-c xml core-data nsmanagedobject