我有一个核心数据应用程序,它在tableView中显示其数据。我知道如何创建CSV文件,我正在创建表时使用cellForRowAtIndexPath中的以下代码:
outputStringToCSV = [outputStringToCSV stringByAppendingFormat:@"%@ ,%@ ,%@ \n", punchitem.punchitemRoomNumber, punchitem.punchitemRoomName, punchitem.punchitemDescription];
NSLog(@"=== OUTPUTSTRING: %@", outputStringToCSV);
我的outputStringToCSV是NSString,我的目的是将格式化的字符串保存为CSV文件。
问题是每当tableView在信息或谓词改变时重新加载时,outputStringToCSV的大小会被附加,并且随着重复信息越来越大。我的outputStringToCSV应该去除cellForRowAtIndexPath以外的其他地方吗?有没有更好的方法从我的表中收集信息并将其加载到CSV文件中?
我不确定现在的方向,并希望得到任何帮助。谢谢!
答案 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"];
}
完成。