使用 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 文件的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中解析 CSV 文件并将其加载到 Core Data 中