1

iCloud コンテナからアプリのキャッシュ ディレクトリにファイルをコピーしようとしています。ログに記録され続けThe operation couldn’t be completed. (Cocoa error 512.)ます。これは非常に広範なエラーを意味NSFileWriteUnknownErrorします。または、書き込みに失敗し、iOS が理由を認識していません。

NSMetadataQueryが終了し、iCloud にファイル名がある場合のコードを次に示します。以下のコードを簡単に説明します。

- (void)loadData:(NSMetadataQuery *)query {

    NSArray *cache = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[cacheDirectory stringByAppendingString:@"/issues"] error:NULL];

    for (NSMetadataItem *item in [query results]) {

        NSURL *name = [item valueForAttribute:NSMetadataItemURLKey];
        NSString *nameString = [item valueForAttribute:NSMetadataItemPathKey];

        NSError *error;

        NSURL *cacheURL = [NSURL fileURLWithPath:cacheDirectory];
        NSURL *destination = [cacheURL URLByAppendingPathComponent:[NSString stringWithFormat:@"issues/%@", [[nameString stringByDeletingLastPathComponent] lastPathComponent]] isDirectory:YES];

        [[NSFileManager defaultManager] copyItemAtURL:[name URLByDeletingLastPathComponent] toURL:destination error:&error];

        }

    }

}

このアプリは、新聞の問題を同期します。iCloud ドキュメント コンテナには、データを含むフォルダがあり (1 つのフォルダは)、各フォルダ内には同じ名前5.1.12の PDF ファイルがあります( )。5.1.12.pdf

なぜこれが起こっているのですか?ご協力いただきありがとうございます。

iCloud: file://localhost/private/var/mobile/Library/Mobile%20Documents/AppBundleID/Documents/5.3.12/

Local: file://localhost/var/mobile/Applications/F91E115B-ECED-403E-AB61-41F7A99EF928/Library/Caches/issues/5.3.12/
4

3 に答える 3

2

解決しました!

ファイルが既に存在する場合、copyItemAtURL はエラーを返します。ほとんどの場合、永続的なセーブゲームのようなものを作成し、新しい変更でファイルを上書きし続けたいと思うでしょう。

このようなものを使用して、ファイルをiCloudに書き込みます

   BYTE *data = NULL;//Put your file data in here
   int FileSize = 0;//replace with your file size
   NSData *myData = [[NSData alloc] initWithBytes:data length:FileSize];
   [myData writeToFile:[FileURL path] atomically:YES];
于 2012-12-02T23:24:22.233 に答える
2

iCloud がファイルを iOS デバイスに同期すると、最初にアプリのコンテナに空のデータレス ファイルが作成され、利用可能なファイルがあることが通知されます。これはあなたのNSMetadataQuery報告です。

の他のキーを見るNSMetadataItemと、アイテムがまだダウンロードされていないことがわかるでしょう。

そのファイルをコピーしたり開いたりする前に、iCloud にダウンロードを依頼する必要があります。アイテムのパスで調整された読み取りを行うと (開いたりコピーしたりする操作の周りで行う必要があります)、暗黙的にファイルがダウンロードされます。

于 2012-07-24T09:52:13.213 に答える
0

ブレークポイントや NSLog を使用してコードをステップ実行します。意図したディレクトリ パスを返さない論理エラーが発生している可能性があります。

于 2012-07-23T04:37:27.400 に答える