Vì vậy, tôi đang tạo tệp .csv và sau đó cho phép người dùng chia sẻ tệp bằng UIActivityViewController.tạo và sử dụng tệp .csv với UIActivityViewController
Mã của tôi để tạo ra các tập tin csv sẽ trả lại NSURL của tập tin:
- (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];
}
và sau đó hoạt động của tôi sử dụng mà NSURL để bắt đầu 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];
}
Khi tôi chọn email một tùy chọn, tệp csv không được đính kèm. nó chỉ có văn bản "results.csv"
tôi đang làm gì sai?
Bạn đã xem tệp chưa? Là nó ổn? Bạn có thể mở tệp trên thư mục của trình mô phỏng ('~/Library/Application Support/iPhone Simulator/...'; bạn có thể phải giữ phím 'option' để xem thư mục' Library' trong Mac OS X Finder) và xác nhận rằng tệp là ok. Tôi thường sẽ lưu chuỗi bằng cách sử dụng phương thức 'NSString' instance' writeToFile'. Loại bỏ các công cụ 'NSFileManager' và' NSFileHandle', quá. – Rob
Nhưng để trả lời câu hỏi của bạn, vấn đề có vẻ như nằm trong dòng 'fileExistsAtPath' của bạn. Dường như bạn đang nói "nếu thư mục tài liệu không tồn tại, hãy tạo tệp". Bạn có thể có nghĩa là 'filePath' ở đó, không phải' docPath'. – Rob