我使用CHCSVParser(Dave DeLong)通过邮件编辑器将核心数据导出到csv,但问题是它采用的是核心数据表名而不是行值。
此外,我希望他们按照特定的顺序。例如“Sewer No”,“Manhole 1”,“Manhole 2”
以下是我正在使用的编码:
//从核心数据中获取数据
NSManagedObjectContext *moc = [self managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription
entityForName:@"Input_Details" inManagedObjectContext:moc];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.predicate = [NSPredicate predicateWithFormat:@"rs_Input_project.name = %@", self.projectObject.name];
[request setEntity:entityDescription];
request.resultType = NSDictionaryResultType;
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sewer_No" ascending:YES];
[request setSortDescriptors:@[sortDescriptor]];
NSError *error;
NSArray *fetchedObjects = [moc executeFetchRequest:request error:&error];
//creating a csv CHCSVWriter
NSOutputStream *output = [NSOutputStream outputStreamToMemory];
CHCSVWriter *writer = [[CHCSVWriter alloc] initWithOutputStream:output encoding:NSUTF8StringEncoding delimiter:','];
for (id object in fetchedObjects)
{
if ([object conformsToProtocol:@protocol(NSFastEnumeration)])
{
[writer writeLineOfFields:object];
}
}
[writer closeStream];
NSData *buffer = [output propertyForKey:NSStreamDataWrittenToMemoryStreamKey];
NSString *string = [[NSString alloc] initWithData:buffer encoding:NSUTF8StringEncoding];
NSLog(@"Length of Buffer:%d Error:%@",[buffer length],[error localizedDescription]);
if ( [MFMailComposeViewController canSendMail] )
{
MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc] init];
mailComposer.mailComposeDelegate = self;
NSData *myData = [string dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"myData csv:%@",myData);
NSLog(@"string csv:%@",string);
// Fill out the email body text
NSString *emailBody = @"Sewer_Output";
[mailComposer setMessageBody:emailBody isHTML:NO];
//attaching the data and naming it Sewer_Output
[mailComposer addAttachmentData:myData mimeType:@"text/cvs" fileName:@"Sewer_Output.csv"];
[self presentModalViewController:mailComposer animated:YES];
}
答案 0 :(得分:2)
//creating a csv CHCSVWriter
NSOutputStream *output = [NSOutputStream outputStreamToMemory];
CHCSVWriter *writer = [[CHCSVWriter alloc] initWithOutputStream:output encoding:NSUTF8StringEncoding delimiter:','];
//wrting header name for csv file
[writer writeField:@"Line No"];
[writer writeField:@"Sewer No"];
[writer writeField:@"Manhole Up"];
[writer writeField:@"Manhole Down"];
[writer finishLine];
for (NSManagedObject *object in fetchedObjects)
{
//getting the data from core data
int line_no = [[object valueForKey:@"line_no"] intValue];
int sewer_No = [[object valueForKey:@"sewer_No"] intValue];
NSString *mh_Up=[object valueForKey:@"mh_Up"];
NSString *mh_down=[object valueForKey:@"mh_down"];
//writing that data to writer for csv file
[writer writeField:[NSString stringWithFormat:@"%i",line_no]];
[writer writeField:[NSString stringWithFormat:@"%i",sewer_No]];
[writer writeField:[NSString stringWithFormat:@"%@",mh_Up]];
[writer writeField:[NSString stringWithFormat:@"%@",mh_down]];
[writer finishLine]; //finishing the writing of first row
}
[writer closeStream];
NSData *buffer = [output propertyForKey:NSStreamDataWrittenToMemoryStreamKey];
NSString *string = [[NSString alloc] initWithData:buffer encoding:NSUTF8StringEncoding];
//NSLog(@"string = %@",string);
由于
答案 1 :(得分:0)
for (ObjectClass *object in fetchedObjects)
{
if ([object conformsToProtocol:@protocol(NSFastEnumeration)])
{
[writer writeField:object.text];
[writer writeField:[NSString stringWithFormat:@"%i",object.sewer_No.intValue]];
[writer finishLine];
}
}