【发布时间】:2011-05-11 13:47:27
【问题描述】:
在我的应用程序中,我需要将一个 100MB 的 xml 文件导入核心数据模型。
到目前为止,我已经导入了一个 100KB 的 xml 文件,一切正常。但是,不确定导入 100MB 的 xml 需要多长时间。一会儿我会运行它。你认为这种方法好吗?
谢谢
NSManagedObjectContext * context = [self managedObjectContext];
// Delete all documents
NSFetchRequest * fetch = [[[NSFetchRequest alloc] init] autorelease];
[fetch setEntity:[NSEntityDescription entityForName:@"Document" inManagedObjectContext:context]];
NSArray * result = [context executeFetchRequest:fetch error:nil];
for (id basket in result)
[context deleteObject:basket];
//Insert documents
TBXML * tbxml = [[TBXML tbxmlWithXMLFile:@"categ_small.xml"] retain];
TBXMLElement * root = tbxml.rootXMLElement;
TBXMLElement * doc = [TBXML childElementNamed:@"doc" parentElement:root];
do {
TBXMLElement * idDoc = [TBXML childElementNamed:@"id" parentElement:doc];
TBXMLElement * titleDoc = [TBXML childElementNamed:@"title" parentElement:doc];
TBXMLElement * descriptionDoc = [TBXML childElementNamed:@"description" parentElement:doc];
TBXMLElement * time = [TBXML childElementNamed:@"time" parentElement:doc];
TBXMLElement * tags = [TBXML childElementNamed:@"tags" parentElement:doc];
TBXMLElement * geo = [TBXML childElementNamed:@"geo" parentElement:doc];
TBXMLElement * event = [TBXML childElementNamed:@"event" parentElement:doc];
TBXMLElement * user = [TBXML childElementNamed:@"user" parentElement:doc];
TBXMLElement * categ = [TBXML childElementNamed:@"categ" parentElement:doc];
NSManagedObject *newDocument = [NSEntityDescription
insertNewObjectForEntityForName:@"Document"
inManagedObjectContext:context];
[newDocument setValue:[TBXML textForElement:idDoc] forKey:@"idDoc"];
[newDocument setValue:[TBXML textForElement:titleDoc] forKey:@"titleDoc"];
[newDocument setValue:[TBXML textForElement:descriptionDoc] forKey:@"descriptionDoc"];
[newDocument setValue:[TBXML textForElement:time] forKey:@"time"];
[newDocument setValue:[TBXML textForElement:tags] forKey:@"tags"];
[newDocument setValue:[TBXML textForElement:geo] forKey:@"geo"];
[newDocument setValue:[TBXML textForElement:event] forKey:@"event"];
[newDocument setValue:[TBXML textForElement:user] forKey:@"user"];
[newDocument setValue:[TBXML textForElement:categ] forKey:@"categ"];
} while ((doc = doc->nextSibling));
更新 这是一次性操作,仅在模拟器中运行,不会与最终应用程序一起部署。
【问题讨论】:
-
不,它几乎所有东西,但不是很好。
-
@JustSid 好的,谢谢!你介意分享一下原因吗?
-
如果只在模拟器上运行,为什么不试试呢?
-
@paulbailey 因为这需要一段时间。无论如何,我已经尝试过了,过了一段时间我得到了一个糟糕的内存访问错误(虽然使用一个小文件它完美地工作)。
标签: objective-c xcode ios core-data ipad