在iOS 12中,不推荐使用NSKeyedArchiver的初始化程序init(forWritingWith :).Xcode 10建议用新的初始化程序init(需要SecureCoding :)替换它.问题是此初始化程序仅设置NSCoder对象的requiresSecureCoding属性的值,但它不设置将包含编码数据的NSMutableData对象.以下是Apple提出的编码CKRecord元数据(CloudKit记录)的原始代码:
let data = NSMutableData()
let coder = NSKeyedArchiver.init(forWritingWith: data)
coder.requiresSecureCoding = true
record.encodeSystemFields(with: coder)
coder.finishEncoding()
Run Code Online (Sandbox Code Playgroud)
CKRecord类的encodeSystemFields方法需要NSKeyedArchiver对象(NSCoder子类),并且编码数据存储在与此对象关联的NSMutableData对象中.如果我用init(requiresSecureCoding :)初始化程序替换init(forWritingWith :)初始化程序,我得到一个NSKeyedArchiver对象,但是这个对象没有与任何NSMutableData对象关联,因此我没有得到记录的元数据.我不确定如何完成代码以将NSKeyedArchiver对象生成的数据转换为NSMutableData对象.
我需要reset/ restartARCore会议。在ARKit中,我只需要创建一个新配置并执行该RunWithConfigAndOptions方法,但是在ARCore中找不到有关如何执行此操作的任何信息。以下是我在Unity for ARKit中使用的代码:
ARKitWorldTrackingSessionConfiguration config = new ARKitWorldTrackingSessionConfiguration();
config.planeDetection = UnityARPlaneDetection.Horizontal;
config.alignment = UnityARAlignment.UnityARAlignmentGravity;
config.enableLightEstimation = true;
UnityARSessionNativeInterface.GetARSessionNativeInterface().RunWithConfigAndOptions(config,
UnityARSessionRunOption.ARSessionRunOptionRemoveExistingAnchors |
UnityARSessionRunOption.ARSessionRunOptionResetTracking);
Run Code Online (Sandbox Code Playgroud)
我在Unity中工作,但是我想任何信息都将有用。
谢谢
我正在测试新的 SwifData 框架并使用新的 #Predicate 宏,并意识到它不支持不区分大小写的搜索。该宏不能与 lowercased() 方法或 localizedLowercase 属性一起使用,因此似乎无法像我们过去使用 NSPredicate 和 [c] 属性那样创建不区分大小写的谓词。
var predicate = #Predicate<Book> {
$0.title.localized().contains(search) }
Run Code Online (Sandbox Code Playgroud)
错误:此谓词不支持 lowercased() 函数(来自宏“Predicate”)
我想知道是否有任何解决办法。谢谢