Ios 当应用程序处于后台时,Avassetrader将无法正确初始化,因此可以';不要开始阅读

Ios 当应用程序处于后台时,Avassetrader将无法正确初始化,因此可以';不要开始阅读,ios,objective-c,ios6,avfoundation,Ios,Objective C,Ios6,Avfoundation,在初始化Avassetrader时,我注意到大约有20%的时间它无法开始阅读。下面是代码片段,代码在20%的时间内停止。“startReading”调用返回NO 有人知道为什么会这样吗?我有什么遗漏吗?我还应该注意,这段代码经常被执行。它可能是大约10个视频被依次处理。因此,大约2到3个视频无法处理,因为“startReading”呼叫将返回NO 更新:通过更多的测试,我发现当应用程序进入后台时,它总是失败。因此,当应用程序处于后台时,Avassetrader无法“启动”。当应用程序在后台运行

在初始化Avassetrader时,我注意到大约有20%的时间它无法开始阅读。下面是代码片段,代码在20%的时间内停止。“startReading”调用返回NO

有人知道为什么会这样吗?我有什么遗漏吗?我还应该注意,这段代码经常被执行。它可能是大约10个视频被依次处理。因此,大约2到3个视频无法处理,因为“startReading”呼叫将返回NO


更新:通过更多的测试,我发现当应用程序进入后台时,它总是失败。因此,当应用程序处于后台时,Avassetrader无法“启动”。当应用程序在后台运行时,有什么方法可以让它工作吗??
您可以请求在后台运行的时间。(已在iOS8上确认,可能也适用于早期的iOS。)

UIBackgroundTaskIdentifier
添加属性

@property (nonatomic) UIBackgroundTaskIdentifier bgIdentifier;
当你的应用程序进入后台时,开始后台任务

self.bgIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler: ^ {
      NSLog(@"background task expired.");
      [[UIApplication sharedApplication] endBackgroundTask:self.bgIdentifier];
      self.bgIdentifier = UIBackgroundTaskInvalid;
}];
做一些工作。(您的资产阅读器现在应该在后台阅读)

完成任务后结束任务,以便系统可以挂起你的应用程序

[[UIApplication sharedApplication] endBackgroundTask:self.bgIdentifier];
self.bgIdentifier = UIBackgroundTaskInvalid;

请记住,使用此方法只能获得几分钟的时间

旁注-在词典中使用现代Objective-C。示例:
NSDictionary*opts=@{@“avurlassetpreferprecurisedurationandtimingkey”:@YES}
您不检查
读卡器
是否为
nil
。如果
nil
,您需要记录
错误
。谢谢您的评论。我刚刚用更多的发现更新了这个问题。看起来只有当应用程序进入后台时,它才会失败。还不明白为什么应用程序在后台时Avassetrader不能工作?嘿,你成功在后台运行Avassetrader了吗?@ymotov你在后台实现了Avassetrader吗?
[[UIApplication sharedApplication] endBackgroundTask:self.bgIdentifier];
self.bgIdentifier = UIBackgroundTaskInvalid;