Parse iOS SDK 上 PFFile.getData() 的 NSFileProtection 级别是啥?
Posted
技术标签:
【中文标题】Parse iOS SDK 上 PFFile.getData() 的 NSFileProtection 级别是啥?【英文标题】:What is the NSFileProtection level for PFFile.getData() on Parse iOS SDK?Parse iOS SDK 上 PFFile.getData() 的 NSFileProtection 级别是什么? 【发布时间】:2016-06-24 15:11:07 【问题描述】:一个应用程序似乎很少崩溃,一位 Apple 工程师建议,原因可能是如果用户在创建 NSData 对象和应用程序尝试从那个 NSData 对象。
这意味着 Parse 正在下载/存储具有“完整”数据保护级别 (NSFileProtectionComplete) 的文件。
let query = PFQuery(className: aClass)
let result = try query.getFirstObject()
guard
let imageObject = result.objectForKey(aKey) as? PFFile,
let imageData = try? imageObject.getData(),
let firstByte = imageData.dataType() // this reads the 1st byte of data
else
return
Parse ios SDK 似乎使用了NSFileProtectionCompleteUntilFirstUserAuthentication
,它允许在设备启动后第一次用户身份验证/解锁后访问文件。
static NSDictionary *_PFFileManagerDefaultDirectoryFileAttributes()
#if !PF_TARGET_OS_OSX
return @ NSFileProtectionKey : NSFileProtectionCompleteUntilFirstUserAuthentication ;
#else
return nil;
#endif
static NSDataWritingOptions _PFFileManagerDefaultDataWritingOptions()
NSDataWritingOptions options = NSDataWritingAtomic;
#if !PF_TARGET_OS_OSX
options |= NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication;
#endif
return options;
@interface PFFileManager ()
@property (nonatomic, copy) NSString *applicationIdentifier;
@property (nonatomic, copy) NSString *applicationGroupIdentifier;
@end
@implementation PFFileManager
那么我假设同步PFFile.getData()
使用NSFileProtectionCompleteUntilFirstUserAuthentication
是否正确?或者它根本没有使用文件保护,因为数据被加载到内存中并且根本没有写入文件?
【问题讨论】:
【参考方案1】:在深入研究 Parse iOS SDK 之后,我可以回答这个问题:
同步(类似于异步)文件提取将数据保存在带有NSFileManager
和NSFileProtectionCompleteUntilFirstUserAuthentication
的临时文件中。
【讨论】:
以上是关于Parse iOS SDK 上 PFFile.getData() 的 NSFileProtection 级别是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Parse 的 iOS SDK(或其他 SDK)如何解决冲突?
如何在 AppDelegate 中使用 Parse 正确设置 Facebook iOS SDK?
使用 Parse iOS SDK 和 Facebook 构建错误