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 文档容器中,有包含数据的文件夹(一个文件夹可以是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

当 iCloud 将文件同步到 iOS 设备时,它首先会在您应用的容器中创建一个空的、无数据的文件,让您知道有可用的文件。这是你的NSMetadataQuery报告。

如果您查看 的其他键,NSMetadataItem您可能会注意到它表示您的项目尚未下载。

在能够复制该文件或打开它之前,您必须要求 iCloud 下载它。在项目的路径上进行协调读取(就像您应该围绕任何打开或复制操作所做的那样)将隐式下载文件。

于 2012-07-24T09:52:13.213 回答
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 回答
0

使用断点和/或 NSLog 单步执行代码。可能是有一个逻辑错误没有返回您想要的目录路径。

于 2012-07-23T04:37:27.400 回答