使用Core Data创建CSV文件

时间:2014-03-26 18:47:16

标签: ios csv core-data export-to-csv

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

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

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

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

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

我不确定现在的方向,并希望得到任何帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

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"];
}

完成。