objective-c - 将 100MB XML 文件导入 iOS 核心数据模型

标签 objective-c xcode ios core-data ipad

在我的应用中,我需要将一个 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));  

更新 这是一次性操作,仅在模拟器中运行,不会与最终应用程序一起部署。

最佳答案

我会执行以下步骤:

  • 用 ruby​​ 或 php 写一个转换器 XML->SQLite,或者如果你不是脚本语言的 friend ,那么看看 SQLite Manager,它是一个管理 SQLite 数据库的 Firefox 插件,它能够导入 XML。

  • 按照本教程预填充核心数据以进行运输:How To Preload/Import Existing Data

关于objective-c - 将 100MB XML 文件导入 iOS 核心数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5965313/

相关文章:

ios - Objective-C语法问题

ios - Touch ID API 响应速度很慢

objective-c - 警告 ASIHttpRequest

ios - merge 2 个分支时 Xcode 6.0.1 崩溃

ios - 在 Swift 中创建导航面板

ios - iOS 上的 PhoneGap 应用程序感觉原生的 UI

ios - 使用动画在 UITextField 中移动文本

ios - 1 个项目中的 2 个目标具有相同的文件名 appdelegate.h

iOS 10 - 模糊背景不再起作用

ios - Alamofire GET 请求无法正常工作