在我的iPAD應用程序中,我調用Web服務來獲取XML響應,然後解析它並將其存儲到我的SQLITE數據庫中。解析並將數據插入到SQLITE中 - ios
解析和保存正常發生,但我遇到的問題是它需要很長時間才能執行操作。
使用mac,我看到了保存到數據庫的記錄數。這是395行,每行有8列,即大約3100條記錄被存儲到我的數據庫(我的實體有8個屬性)。在iPAD上,整個操作需要大約25秒,據我所知這個過程太長。 我無法弄清楚爲什麼這麼長時間以及我出錯的地方。
這是我使用的解析XML和存儲代碼 -
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:@"return"])
{
// Blank lab panel object
objLabPanel = [NSEntityDescription insertNewObjectForEntityForName:@"LabPanels" inManagedObjectContext:managedObjectContext];
mainElement = elementName;
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
elementValue = [[NSMutableString alloc] init];
[elementValue appendString:string];
// Handle html codes
elementValue = [CommonHelper encodeHTMLCharactorsForDataBaseStorage:elementValue];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
if ([elementName isEqualToString:@"return"])
{
[objPatient addLabPanelsObject:objLabPanel];
// Save
NSError *error = nil;
BOOL saveObj = FALSE;
saveObj = [managedObjectContext save:&error];
if (saveObj == FALSE)
{
NSLog (@"Error: %@", error);
}
}
else if ([elementName isEqualToString:@"batteryID"] && [mainElement isEqualToString:@"return"])
{
objLabPanel.labPanelBatteryId = elementValue;
}
else if ([elementName isEqualToString:@"batteryVersionNum"] && [mainElement isEqualToString:@"return"])
{
objLabPanel.labBatteryVersionId = elementValue;
}
else if ([elementName isEqualToString:@"conceptCode"] && [mainElement isEqualToString:@"return"])
{
objLabPanel.labPanelCode = elementValue;
}
else if ([elementName isEqualToString:@"conceptDescription"] && [mainElement isEqualToString:@"return"])
{
objLabPanel.labPanelDesc = elementValue;
}
else if ([elementName isEqualToString:@"effectiveEndTime"] && [mainElement isEqualToString:@"return"])
{
endDate = [CommonHelper getDateFromXMLString:[NSString stringWithString:elementValue] :@"yyyy-MM-dd'T'HHmmssZ"];
objLabPanel.labPanelEndDate = endDate;
}
else if ([elementName isEqualToString:@"effectiveStartTime"] && [mainElement isEqualToString:@"return"])
{
startDate = [CommonHelper getDateFromXMLString:[NSString stringWithString:elementValue] :@"yyyy-MM-dd'T'HHmmssZ"];
objLabPanel.labPanelStartDate = startDate;
}
else if ([elementName isEqualToString:@"body"])
{
// Release all variables at the end of xml parsing
[self releaseVariables];
}
elementValue = nil;
}
這裏是我解析XML的樣本 -
<return>
<batteryID>1234</batteryID>
<batteryVersionNum>1</batteryVersionNum>
<conceptCode>abc</conceptCode>
<conceptDescription>abc</conceptDescription>
<effectiveEndTime>2010-11-23</effectiveEndTime>
<effectiveStartTime>2010-11-23</effectiveStartTime>
</return>
<return>
<batteryID>2345</batteryID>
<batteryVersionNum>1</batteryVersionNum>
<conceptCode>bac</conceptCode>
<conceptDescription>bac</conceptDescription>
<effectiveEndTime>2010-11-23</effectiveEndTime>
<effectiveStartTime>2010-11-23</effectiveStartTime>
</return>
這將是巨大的,如果有人能幫我解決這個問題,並告訴我,我解析和保存的方式是否有問題。
你在儀器下運行過嗎?它具有廣泛的工具來調查資源使用情況並幫助您找到問題所在。 –
如果我是對的,我認爲自從我爲遇到的每個返回標記保存managedObjectContext時,這就是需要時間的地方。有沒有另一種方法可以讓我一次存儲所有的對象? – learner2010