gpt4 book ai didi

ios - 解析数据并将其插入 SQLITE - ios

转载 作者:行者123 更新时间:2023-11-29 11:19:33 26 4
gpt4 key购买 nike

在我的 iPAD 应用程序中,我调用网络服务来获取 XML 响应,然后解析它并将其存储到我的 SQLITE 数据库中。

解析和保存正常进行,但我遇到的问题是执行操作需要很长时间。

使用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>

如果有人能帮我解决这个问题并告诉我我解析和保存的方式是否有问题,那就太好了。

最佳答案

您应该定期保存 MOC,而不是每次插入都保存。当您要求保存 MOC 时,它会被保存,因此由您决定何时保存。通常,您应该只在 MOC 与您的需求一致时才保存它(它在低级关系方面始终一致)。无论如何,我会等到解析结束。

关于ios - 解析数据并将其插入 SQLITE - ios,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7947692/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com