11

そこで、.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」というテキストが含まれているだけです

私は何が間違っているのですか?

4

3 に答える 3

6

問題はあなたの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];
}
于 2012-12-16T23:25:28.657 に答える
5

UIActivityViewController のソリューションを共有し、テキストを CSV ファイルとして共有したいと考えています。このソリューションは、メールで共有したり、Dropbox に保存したりする場合にも機能します。

@IBAction func shareCsv(sender: AnyObject) {
    //Your CSV text
    let str = self.descriptionText.text!
    filename = getDocumentsDirectory().stringByAppendingPathComponent("file.csv")

    do {
        try str.writeToFile(filename!, atomically: true, encoding: NSUTF8StringEncoding)

        let fileData = NSURL(fileURLWithPath: filename!)

        let objectsToShare = [fileData]
        let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)

        self.presentViewController(activityVC, animated: true, completion: nil)

    } catch {
        print("cannot write file")
        // failed to write file – bad permissions, bad filename, missing permissions, or more likely it can't be converted to the encoding
    }

}

func getDocumentsDirectory() -> NSString {
    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let documentsDirectory = paths[0]
    return documentsDirectory
}

それが役に立てば幸い!:)

于 2016-01-03T21:51:30.733 に答える
5

これは Swift 3 バージョンとして機能し、メールの添付ファイルとして機能し、Dropbox に保存されます。

var csvDetailsString = ""

for myObject in myObjectsArray {
    csvDetailsString = csvDetailsString.appending(myObject.someText)
    csvDetailsString = csvDetailsString.appending(",")
    csvDetailsString = csvDetailsString.appending("More Stuff")
    csvDetailsString = csvDetailsString.appending("\n")

}

let fileName = "Output"
let docDirectory = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
if let fileURL = docDirectory?.appendingPathComponent(fileName).appendingPathExtension("csv") {
    do {
        try csvDetailsString.write(to: fileURL, atomically: true, encoding: .utf8)

        let objectsToShare = [fileURL]
        let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)

        activityVC.excludedActivityTypes = [UIActivityType.addToReadingList]
        self.present(activityVC, animated: true, completion: nil)

    } catch let error as NSError {
        print("Failed writing to URL: \(fileURL), Error: " + error.localizedDescription)
    }
}
于 2016-11-14T12:43:40.487 に答える