NSKeyedArchiver 在模拟器上工作但在 tvOS 设备上失败

NSKeyedArchiver works on simulator but fails on tvOS device

我正在将一个对象存档到一个文件中 - 在模拟器上它完美地工作,但在 tvOS (Apple TV) 设备上它没有(换句话说 -(BOOL)archiveRootObject:toFile: returns 一个有趣的NO):

static NSString * _DocumentsDirectory() {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentsDirectory, NSUserDomainMask, YES);
    return paths[0];
}

和:

NSString *fullPath = [_DocumentsDirectory() stringByAppendingPathComponent:filename];
[NSKeyedArchiver archiveRootObject:obj toFile:fullPath];

其中filename = @"foo.data"obj符合NSCoding.

我尝试了不同的方式将路径和不同的目录放在一起,但结果是一样的。 我唯一的想法是可能需要设置一些写入权限。

有什么想法吗?

经过一番调查,我发现 Apple 允许您在 tvOS 应用程序中存储数据的唯一方式如下:

因此,我选择使用 Cache 目录(仅在需要 space 时才清除)用于我最终可以重新下载的数据,以及 NSUserDefaults 用于我需要始终在本地访问的较小数据.