所以我正在创建一个 .csv 文件,然后允许用户使用 UIActivityViewController 共享它。
我创建 csv 文件的代码将返回文件的 NSURL:
- (NSURL *)exportToCSV
{
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSString *filePath = [docPath stringByAppendingPathComponent:@"results.csv"];
if (![[NSFileManager defaultManager] fileExistsAtPath:docPath]) {
[[NSFileManager defaultManager] createFileAtPath:filePath
contents:nil
attributes:nil];
}
NSMutableString *contents = [NSMutableString stringWithCapacity:0];
//fill contents with data in csv format
// ...
NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:filePath];
[fileHandle writeData:[contents dataUsingEncoding:NSUTF8StringEncoding]];
[fileHandle closeFile];
return [NSURL fileURLWithPath:filePath];
}
然后我的事件使用该 NSURL 来启动 UIActivityViewController:
- (IBAction)shareButtonPressed:(id)sender {
NSArray *activityItems = @[@"results.csv", [self.object exportToCSV]];
UIActivityViewController *shareScreen = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
[self presentViewController:shareScreen animated:YES completion:nil];
}
当我选择邮件选项时,未附加 csv 文件。它只有文本“results.csv”
我做错了什么?
最佳答案
问题似乎出在您的 fileExistsAtPath
行中。您似乎在说“如果文档目录不存在,则创建文件”。这当然是不对的。
就我个人而言,我会丢失那些东西并将其更改为
- (NSURL *)exportToCSV
{
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSString *filePath = [docPath stringByAppendingPathComponent:@"results.csv"];
NSMutableString *contents = [NSMutableString stringWithCapacity:0];
//fill contents with data in csv format
// ...
NSError *error;
[contents writeToFile:filePath
atomically:YES
encoding:NSUTF8StringEncoding
error:&error];
// check for the error
return [NSURL fileURLWithPath:filePath];
}
关于ios - 使用 UIActivityViewController 创建和使用 .csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13906140/