2014-02-24 4 views
0

내가하고있는 일 : XML을 구문 분석하여 NSManagedObject 하위 클래스를 만들고 항상 파싱에 실패했습니다. 여기Objective-C NSManagedObjects에 대한 XML 구문 분석

코드 : answerStringstd::string입니다

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]; 

. 그리고 나는 항상 NOsuccess 플래그로 받고 있습니다.

내 개체 클래스 :

@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) 나는이 문제를 해결

+0

구문 분석하는 동안 어떤 오류가 발생합니까? – Leena

답변

0

으로 작동을 멈 춥니 다. 대신 XML 같은 형식의 : 파일 만의 여는 태그와 닫는 태그 시작 부분과 끝,

<startXML> 
    <System> 
     <systemFullName>aaaa</systemFullName> 
     <systemShortName>a</systemShortName> 
    </System> 
    <System> 
     <systemFullName>bbbb</systemFullName> 
     <systemShortName>b</systemShortName> 
    </System> 
</startXML> 

그는 동일합니다

<System> 
    <systemFullName>aaaa</systemFullName> 
    <systemShortName>a</systemShortName> 
</System> 
<System> 
    <systemFullName>bbbb</systemFullName> 
    <systemShortName>b</systemShortName> 
</System> 

나는이 형식을 사용했다. 한숨.