草庐IT

NSKeyedUnarchiver

全部标签

ios - 捕获 NSKeyedUnarchiver 异常

在Swift中,NSKeyedUnarchiver.unarchiveObjectWithData(data)将在无法取消归档数据时抛出异常。在某些情况下,我们无法保证数据是否未损坏,例如从文件中读取时。我不知道Swift中有try/catch机制,也不知道有类似canUnarchive的方法可以帮助防止异常。除了在Obj-C中实现try/catch之外,是否有针对此问题的纯Swift解决方案? 最佳答案 因为unarchiveObjectWithData()不会throw它的异常,目前没有办法在Swift中捕获它(截至写作时)。i

ios - 重命名 Xcode 项目后出现 NSKeyedUnarchiver 错误

我刚刚重命名了我的Xcode项目,当我运行它时出现了这个错误:2015-11-1405:32:42.337BuckTracker[3537:1456100]*Terminatingappduetouncaughtexception'NSInvalidUnarchiveOperationException',reason:'*-[NSKeyedUnarchiverdecodeObjectForKey:]:cannotdecodeobjectofclass(iBudgeter.Record)forkey(NS.objects);theclassmaybedefinedinsourcecod

ios - 使用 NSKeyedUnarchiver unarchivedObject(ofClass :from:)) 取消归档数组

自升级到Swift4.2后,我发现许多NSKeyedUnarchiver和NSKeyedArchiver方法已被弃用,我们现在必须使用类型方法staticfuncunarchivedObject(ofClass:DecodedObjectType.Type,from:Data)->DecodedObjectType?取消归档数据。我已经成功地归档了我的定制类WidgetData的数组,它是一个NSObject子类:privatestaticfuncarchiveWidgetDataArray(widgetDataArray:[WidgetData])->NSData{guardletd

swift - 如何将委托(delegate)与 NSKeyedUnarchiver 一起使用?

我正在使用NSKeyedUnarchiver取消存档一个对象,并想使用委托(delegate)(NSKeyedUnarchiverDelegate),但我的委托(delegate)没有被调用。存档和取消存档工作正常,但未调用委托(delegate)(unarchiver和unarchiverDidFinish)。有人可以帮忙吗?我有以下实现:classBlobHandler:NSObject,NSKeyedUnarchiverDelegate{funcload()->MYOBJECTCLASS{letdata:NSData?=getBlob();varmykeyedunarchiver

ios - NSKeyedUnarchiver 错误处理 - 防止 Swift 崩溃

由于Swift目前没有try-catch,我应该如何防止这行代码中的错误数据导致崩溃?varmyObject=NSKeyedUnarchiver.unarchiveObjectWithData(data)asMyClass更新我在Playground上创建了一个非常简单的案例用于演示。假设我们不知道data中有什么,我怎样才能在第二行捕获SIGABRT?有没有办法检查以确保在调用unarchiveObjectWithData之前可以取消归档NSData对象?vardata="foobar".dataUsingEncoding(NSUTF8StringEncoding,allowLoss

ios - Swift 唯一防止 NSKeyedUnarchiver.decodeObject 崩溃的方法?

如果原始类未知,NSKeyedUnarchiver.decodeObject将导致崩溃/SIGABRT。我所看到的解决这个问题的唯一解决方案可以追溯到Swift的早期历史,并且需要使用ObjectiveC(也早于Swift2对guard、throws、的实现)尝试&捕捉)。我可以找出ObjectiveC路线-但如果可能的话,我更愿意了解仅Swift的解决方案。例如-数据已使用NSPropertyListFormat.XMLFormat_v1_0编码。如果编码数据的类未知,则以下代码将在unarchiver.decodeObject()处失败。//...letdat=NSData(con