2

複数のファイル (HTML ファイル) をクラウドにバックアップする際に問題が発生しました。

ファイルをバックアップするたびに、それらはクラウドに置かれ、デバイスから削除されます。しかし、iCloud の Documents フォルダの構造は奇妙です。

NSLog 出力:

クラウド内のファイル: file://localhost/private/.../Mobile%20Documents/...~com~nwt/Documents/File1_01-06-2013.html/ クラウド内のファイル: file://localhost/ private/.../Mobile%20Documents/...~com~nwt/Documents/File1_01-06-2013.html/File1_01-06-2013.html クラウド内のファイル: file://localhost/private/.. ./Mobile%20Documents/...~com~nwt/Documents/File1_01-06-2013.html/File2_01-06-2013.html クラウド内のファイル: file://localhost/private/.../Mobile% 20Documents/...~com~nwt/Documents/File1_01-06-2013.html/File3_01-06-2013.html クラウド内のファイル: file://localhost/private/.../Mobile%20Documents/.. .~com~nwt/Documents/Rbi8Bookmarks.plist

最初のインスタンスでわかるように、最初の html ファイルのフォルダーを作成し、最初のファイルの名前でフォルダーに html ファイルの完全な配列を入れ子にします。しかし、単一のファイル (plist) ではそうではありません。

何か案は?私は一週間ずっとこの問題を見てきましたが、どこにも行きません。

フィリップ

これが私のコードです:

- (IBAction)backupToiCloud:(id)sender {

        NSString *directoryToCopyFrom = [[searchPaths objectAtIndex:0] stringByAppendingPathComponent:@"Notes"];
        NSDirectoryEnumerator *enumeratedDirectory = [fileManager enumeratorAtPath:directoryToCopyFrom];
        NSString *filename;

        while ((filename = [enumeratedDirectory nextObject])) {
            if ([filename hasSuffix:@".html"]) {

                // First, copy the note files to the documents directory as a backup to be copied back after cloud backup is finished
                [fileManager copyItemAtPath:[directoryToCopyFrom stringByAppendingPathComponent:filename]
                                     toPath:[documentFolderPath stringByAppendingPathComponent:filename] error:&error];
                NSLog(@"Files on my phone: %@", filename);

                [self performSelector:@selector(moveNotesToCloud) withObject:self afterDelay:3];

            }
        }
}

- (void)moveNotesToCloud {

    NSError *error;
    NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *directoryToCopyFrom = [[searchPaths objectAtIndex:0] stringByAppendingPathComponent:@"Notes"];

    NSString *filename;

    NSDirectoryEnumerator *enumeratedDirectory = [fileManager enumeratorAtPath:directoryToCopyFrom];
    NSURL *URLToBackup = [NSURL URLWithString:directoryToCopyFrom];

    while ((filename = [enumeratedDirectory nextObject])) {
        if ([filename hasSuffix:@".html"]) {

            NSURL *iCloudDocumentsURL = [[fileManager URLForUbiquityContainerIdentifier:nil] URLByAppendingPathComponent:@"Documents"]; // Discovering iCloud URL
            NSURL *destURL = [iCloudDocumentsURL URLByAppendingPathComponent:filename];

            [fileManager setUbiquitous:YES itemAtURL:URLToBackup destinationURL:destURL error:&error];
            NSLog(@"Notes copied to the cloud: %@", error);

            NSString *path = [[searchPaths objectAtIndex:0] stringByAppendingPathComponent:@"Notes"]; // Does directory already exist?
            [fileManager createDirectoryAtPath:path withIntermediateDirectories:NO attributes:nil error:&error];

        }
    } // end WHILE statement

    // Wait 5 seconds for the cloud to register the changes and then list them in the console
    [self performSelector:@selector(listNotesInThecloud) withObject:self afterDelay:5.0];


}

// THIS JUST LISTS THE FILES IN THE CLOUD
- (void)listNotesInThecloud {

    NSURL *iCloudDocumentsURL = [[fileManager URLForUbiquityContainerIdentifier:nil] URLByAppendingPathComponent:@"Documents"]; // Discovering iCloud URL
    NSDirectoryEnumerator *enumeratedDirectory = [fileManager enumeratorAtPath:iCloudDocumentsURL.path];
    NSString *filename;
    while ((filename = [enumeratedDirectory nextObject])) {
        if ([filename hasSuffix:@".html"] || [filename hasSuffix:@".plist"]) {

            NSURL *destURL = [iCloudDocumentsURL URLByAppendingPathComponent:filename];
            NSLog(@"Files in the cloud: %@", destURL);

        }

    } // end WHILE statement

}
4

1 に答える 1