iOS8.4.在设备上不是模拟器.
我得到了这个错误;
Assertion failure in -[UICollectionView _updateWithItems:tentativelyForReordering:], /SourceCache/UIKit/UIKit-3347.44.2/UICollectionView.m:4563
我打电话的时候
NSArray* array_indexPaths = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:1 inSection:0]];
[self.collectionView reloadItemsAtIndexPaths:indexPaths];
Run Code Online (Sandbox Code Playgroud)
我试过把上面的东西放在里面
[self.collectionView performBatchUpdates:^{
没有运气.
有没有其他人经历过这个或者知道为什么会这样?
自从升级到Swift 4.2以来,我发现许多NSKeyedUnarchiver和NSKeyedArchiver方法已被弃用,我们现在必须使用type方法static func unarchivedObject<DecodedObjectType>(ofClass: DecodedObjectType.Type, from: Data) -> DecodedObjectType?来取消归档数据.
我成功地存档了我的定制类WidgetData的数组,这是一个NSObject子类:
private static func archiveWidgetDataArray(widgetDataArray : [WidgetData]) -> NSData {
guard let data = try? NSKeyedArchiver.archivedData(withRootObject: widgetDataArray as Array, requiringSecureCoding: false) as NSData
else { fatalError("Can't encode data") }
return data
}
Run Code Online (Sandbox Code Playgroud)
当我尝试取消归档此数据时出现问题:
static func loadWidgetDataArray() -> [WidgetData]? {
if isKeyPresentInUserDefaults(key: USER_DEFAULTS_KEY_WIDGET_DATA) {
if let unarchivedObject = UserDefaults.standard.object(forKey: USER_DEFAULTS_KEY_WIDGET_DATA) as? Data {
//THIS FUNCTION HAS NOW BEEN DEPRECATED:
//return NSKeyedUnarchiver.unarchiveObject(with: unarchivedObject as Data) as? [WidgetData]
guard let nsArray = …Run Code Online (Sandbox Code Playgroud) 当在 SceneKit 场景中使用UIViewas 时,该视图可以成为响应者链的一部分吗?SCNMaterialProperty
澄清如何:
omg_you_can_use_an_actual_uiview_now = UIView(frame: CGRect(x: 0, y: 0, width: 500, height: 500))
material_plane.diffuse.contents = omg_you_can_use_an_actual_uiview_now
let geom_plane = SCNPlane(width: 1, height: 1)
geom_plane.materials = [material_plane]
Run Code Online (Sandbox Code Playgroud) 请有人告诉我是否有一种方法可以选择性地预先缓冲AVQueuePlayer阵列中的avplayeritems,而不是将其保留AVQueuePlayer为仅在第一项完成播放时加载下一项的自动方式.
我正在加载一系列4个短片段,我想在告诉AVQueuePlayer播放阵列之前预先缓存它们.实际上有一种方法可以获得avqueueplayer的bonet并根据需要控制预缓冲吗?
现在有了它的默认延迟加载行为,我在播放中得到了一些好处,剪辑甚至没有正常播放,因为它AVQueuePlayer正在尝试在播放时加载下一个剪辑.我在iPad上执行此操作已部署到实际设备而不是模拟器.
您可以使用mpmovieplayer通过调用[player prepareToPlay];基本上手动启动所需的每个视频文件的加载来执行此操作,然后您可以通过查看mpmovieplayerLoadstateDidChange通知并测试loadState值以查看是否已完全加载来检查加载的完成情况,然后告诉mpmovieplayer玩.你怎么能有效地做类似的事情AVQueuePlayer?
这甚至可能还是我发现了一个主要的缺点AVQueuePlayer?
playerObserver斯蒂芬很好的建议,但是需要的是你需要能够明确地将单个项目加载到内存中,然后告诉AVQueuePlayer'不要播放数组中的第一项,直到数组中的所有项都加载到内存'目前似乎没有办法启动数组加载中的第二项,直到第一项即将结束!
作为一个稍微独立的问题,我还注意到了一些奇怪的AVQueuePlayer地方,如果你将两个相同的源视频文件加载到数组中(两者都被引用为两个完全独立的,AVPlayerItems就像你应该做的那样)当你播放视频片段时数组一直播放,第一次剪辑播放ok,但是当再次播放相同的剪辑(作为单独的剪辑AVPlayerItem)时,它会非常快速地播放,直到视频中的某个点最终开始以正常速度播放从那里.
有没有人注意到这种行为?
我ARSCNView正在跑步ARSession。您可以session.pause()肯定地暂停会话,但这仍然有效,可以使会话继续运行。我尝试ARSCNView通过将其从其超级视图中删除来取消分配。该ARSCNView确实重新分配,但ARSession仍运行后!您不能分配nil给ARSession任何一个。我可以看到ARSessionDelegate的
func session(_ session: ARSession, didUpdate frame: ARFrame)
Run Code Online (Sandbox Code Playgroud)
仍在被叫!
完成后,如何用ARKit彻底擦拭干净?
可能吗?