안녕 유래 친구,CoreData 및 NSXMLParser
는 내가있는 NSURLConnection에서 데이터를 얻었다 후 NSXMLParser를 사용하여 네트워크의 XML 파일을 구문 분석하고있다. XML에는 많은 "항목"이 있으며 각 항목에는 범주가 1 개 있습니다. CoreData 모듈에는 하나의 범주에 대한 관계가있는 항목 엔터티가 있습니다.
XML 파일을 구문 분석하고 메시지 파서를 치는 동안 : didStartElement : ... "Item"요소를 사용하여 Item에 대한 NSEntityDescription을 만듭니다. 그런 다음 파서가 메시지 parser : didStartElement에 Category 항목을 다시 도착시키고 Category에 대한 NSEntityDescription을 만듭니다.
는 XML :
이<item>
<title>Plates</title>
<category>Kitchen</category>
<price>14</price>
<picture></picture>
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
//Started reading an Item Element, init currentItemObject
if ([elementName isEqualToString:@"Item"]) {
[self.currStringFound setString:@""];
currentItemObject = (Item *)[NSEntityDescription insertNewObjectForEntityForName:@"Item" inManagedObjectContext:[self managedObjectContext]];
return;
}
//Started Title element
if ([elementName isEqualToString:kTitleElementName]) {
[self.currStringFound setString:@""];
}
//Started Category element
if ([elementName isEqualToString:kCategoryElementName]) {
currentCategory = (Category *)[NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:[self managedObjectContext]];
[self.currStringFound setString:@""];
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:kItemElementName]) {
//save the item to CoreData
NSManagedObjectContext *context = [self managedObjectContext];
NSError *error;
if (![context save:&error]) {
NSLog(@"could not save Item");
exit(1);
}
return;
}
//Started Category element
if ([elementName isEqualToString:kCategoryElementName]) {
currentCategory.title = self.currStringFound;
NSLog(@"Category = %@",self.currStringFound);
NSManagedObjectContext *context = [self managedObjectContext];
NSError *error;
if (![context save:&error]) {
NSLog(@"could not save Item");
exit(1);
}
return;
}}
그래서 무슨 일하는 저장 맥락이다 : 호출이 먼저 CurrentItem이 작성을 완료되지 않은 상태에서 currentCategory 요구되고있다.
이것은 유용한 팁입니다. 각 엔티티 후에 저장하게됩니다. 나는 결국 모든 것을 저장할 수 있다는 것을 알지 못했지만 이것은 훨씬 안전 해 보입니다. touchXML에 대해 나는 그것을 이미 다운로드 한 것입니다,하지만 난 단지 XML에서 읽기 때문에 그것은 NSXMLParser이 작업을 위해 충분한 것 같습니다. 감사합니다. –