Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用核心数据创建CSV文件_Ios_Csv_Core Data_Export To Csv - Fatal编程技术网

Ios 使用核心数据创建CSV文件

Ios 使用核心数据创建CSV文件,ios,csv,core-data,export-to-csv,Ios,Csv,Core Data,Export To Csv,我有一个核心数据应用程序,可以在tableView中显示其数据。我知道如何创建CSV文件,在创建表格时,我正在CellForRowatineXpath中使用以下代码: outputStringToCSV = [outputStringToCSV stringByAppendingFormat:@"%@ ,%@ ,%@ \n", punchitem.punchitemRoomNumber, punchitem.punchitemRoomName, punchitem.punchitemDescri

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

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

NSLog(@"=== OUTPUTSTRING: %@", outputStringToCSV);
我的outputStringToCSV是一个NSString,我的目的是将格式化的字符串保存到CSV文件中

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


我不知道现在该往哪个方向走,如果能得到任何帮助,我将不胜感激。谢谢

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

完成。

您应该在需要时创建一次文件,而不是每次显示单元格时创建一次……是否只需要一份数据库的CSV副本?为什么不在应用程序启动或第一次加载视图时转储一次呢?我不知道如何创建一次。用户将使用操作表通知应用程序保存CSV,然后通过电子邮件发送。我不知道如何将数据保存到CSV中。当用户想要发送CSV文件时,请仔细查看您的所有操作并创建CSV字符串…不要忘记实际将
resultString
保存到某个地方。:)@汤姆哈林顿哈哈,真的!非常感谢。这很有帮助!!