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 用于我需要始终在本地访问的较小数据.
我正在将一个对象存档到一个文件中 - 在模拟器上它完美地工作,但在 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 用于我需要始终在本地访问的较小数据.