使用 Core Data 创建 CSV 文件

Posted

技术标签:

【中文标题】使用 Core Data 创建 CSV 文件【英文标题】:Creating a CSV file using Core Data 【发布时间】:2014-03-26 18:47:15 【问题描述】:

我有一个核心数据应用程序,它在 tableView 中显示其数据。我知道如何创建 CSV 文件,并且在创建表时在 cellForRowAtIndexPath 中使用以下代码:

outputStringToCSV = [outputStringToCSV stringByAppendingFormat:@"%@ ,%@ ,%@ \n", punchitem.punchitemRoomNumber, punchitem.punchitemRoomName, punchitem.punchitemDescription];

NSLog(@"=== OUTPUTSTRING: %@", outputStringToCSV);

我的 outputStringToCSV 是一个 NSString,我的目的是将格式化的字符串保存到 CSV 文件中。

问题是每次 tableView 在信息或谓词更改时重新加载时,outputStringToCSV 的大小都会随着重复信息而变得越来越大。我的 outputStringToCSV 是否应该转到 cellForRowAtIndexPath 以外的其他地方?有没有更好的方法从我的表中收集信息并将其加载到 CSV 文件中?

我不确定现在该往哪个方向发展,希望能提供任何帮助。谢谢!

【问题讨论】:

您应该在需要时创建一次文件,而不是每次显示单元格时... 您只是想要一份 CSV 格式的数据库副本吗?为什么不只在您的应用启动或第一次加载视图时转储一次? 我不确定如何创建一次。用户将使用操作表告诉应用程序保存 CSV,然后通过电子邮件发送。我不知道如何将数据保存到 CSV。 当用户想要发送 csv 文件时,遍历所有 robejcts 并创建 csv 字符串 【参考方案1】:

cellForRowAtIndexPath: 应该只返回请求的单元格而不做其他任何事情。如果您在该方法内创建 CSV 文件,您的数据将不完整,因为该方法只会为可见单元格调用。如果您有 1000 个条目并且您的用户从不滚动到底部,那么您的文件将不完整。

您应该创建一个指定的方法来导出您的 CSV,如下所示:

- (void)exportCSV

    NSMutableArray *results = [[NSMutableArray alloc] init];
    NSManagedObjectContext *moc = [self managedObjectContext];
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:[NSEntityDescription entityForName:@"PunchItem" inManagedObjectContext:moc]];

    [request setSortDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"punchitemRoomNumber" ascending:YES]]];
    NSError *error = nil;
    NSArray *punchItems = [moc executeFetchRequest:request error:&error];

    if (error) 
        NSLog(@"Error fetching the punch item entities: %@", error);
     else 
        for (PunchItem *punchitem in punchItems) 
            [results addObject:[NSString stringWithFormat:@"%@ ,%@ ,%@", punchitem.punchitemRoomNumber, punchitem.punchitemRoomName, punchitem.punchitemDescription]];
        
    

    NSString *resultString = [results componentsJoinedByString:@" \n"];

完成。

【讨论】:

...别忘了在某处实际保存resultString。 :) @TomHarrington 哈哈,确实! 谢谢。这很有帮助!

以上是关于使用 Core Data 创建 CSV 文件的主要内容,如果未能解决你的问题,请参考以下文章

在 Core Data 中加载 csv 文件

在 Swift 中解析 CSV 文件并将其加载到 Core Data 中

用php创建csv文件

Python Killed: 9 在使用从 2 个 csv 文件创建的字典运行代码时

使用循环创建多个数据框

如何从文件夹的动态 csv 文件创建 HTML 数据表