Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iProtectedDataAvailable在iOS中始终返回true 问题_Ios_Objective C_Xcode_Appdelegate_Data Protection - Fatal编程技术网

iProtectedDataAvailable在iOS中始终返回true 问题

iProtectedDataAvailable在iOS中始终返回true 问题,ios,objective-c,xcode,appdelegate,data-protection,Ios,Objective C,Xcode,Appdelegate,Data Protection,isProtectedDataAvailable为true,但在iOS中10~20秒后调用了applicationProtectedDataDidBecomeAvailable,这意味着在调用回调之前,isProtectedDataAvailable应为false 我正在开发iOS应用内置Objective C。我已从AppStore配置文件以及xcode plist为我的应用程序启用(当前配置为) 由于苹果的政策,在设备重启和首次解锁后的几秒钟内,我们的数据库将无法访问。所以,当应用程序启动

isProtectedDataAvailable
为true,但在iOS中10~20秒后调用了
applicationProtectedDataDidBecomeAvailable
,这意味着在调用回调之前,
isProtectedDataAvailable
应为false


我正在开发
iOS
应用内置
Objective C
。我已从AppStore配置文件以及xcode plist为我的应用程序启用(当前配置为)

由于苹果的政策,在设备重启和首次解锁后的几秒钟内,我们的数据库将无法访问。所以,当应用程序启动时,我用以下逻辑限制任何数据库操作

if([[UIApplication sharedApplication] isProtectedDataAvailable]) {
    //access data
}else {
    // wait for applicationProtectedDataDidBecomeAvailable callback
}
我发现了一些意想不到的行为。即使
[[UIApplication sharedApplication]isProtectedDataAvailable]
返回true,但在
10~20秒之后()
applicationProtectedDataDidBecomeAvailable
回调被调用,作为上述代码逻辑的一部分,数据库被访问并失败,因为实际上仍然受到操作系统的保护

我有什么遗漏吗?当实际受保护的数据还不可用时,
iOS
为什么将
[[UIApplication sharedApplication]isProtectedDataAvailable]
值返回为true

我正在开发Xcode 11.0,测试设备OS13.2

更新 对于日志中的某些情况,我发现
[[UIApplication sharedApplication]isProtectedDataAvailable]
返回1,但NSUserDefault仍然无法访问。可能的原因是什么


isProtectedDataAvailable-如果数据保护已启用且设备当前已锁定,则此属性的值为false。如果设备已解锁或未启用内容保护,则此属性的值将设置为true。当此属性的值为false时,应用程序无法读取或写入分配了complete或completeUnlessOpen保护密钥的文件。用户必须先解锁设备,然后应用程序才能访问它们。 NSFileProtectionCompleteUntilFirstUserAuthentication用户首次解锁设备后,即使用户随后锁定了设备,您的应用程序也可以访问该文件并继续访问该文件。

是否在主线程上调用该方法?在主线程上是,因为我正在从应用程序委托回调调用。我认为您必须等待一段时间,可能是屏幕锁定后10秒的宽限期,然后才锁定受保护的数据。您可以从Xcode>Window>Devices@Niraj宽限期应该由操作系统自己处理。因为回调将在设备锁定解锁事件的宽限期之后触发。我是否也应该在启动回调后等待?是否在真实设备上测试此功能?