问题标签 [nssecurecoding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
249 浏览

ios - NSSecureUnarchiveFromDataTransformer.allowedTopLevelClasses 不再包含 NSSet?

在 NSSecureUnarchiveFromDataTransformer 的类头中,记录了 NSSet 是一个允许的类。

但是,当调用此方法时,我看到 NSSet 未包含在返回的数组中。

我在 CoreData 属性中使用 NSSet,使用它时遇到崩溃。

这是一个错误,还是有什么改变?

0 投票
1 回答
201 浏览

swift - NSKeyedUnarchiver.unarchiveTopLevelObjectWithData 返回 nil

我想将一组对象保存到 UserDefaults 中并将其加载回来。

尝试取消归档数据时,它总是返回 nil .. 有什么想法吗?

这是我的对象:

归档数据:

解压数据:

保存到 UserDefaults:

从 UserDefaults 加载:

用于保存/加载的 UserDefaults 助手:

0 投票
1 回答
712 浏览

ios - 如何修复“NSKeyedUnarchiveFromData”不应用于取消归档并将在未来版本中删除的错误?

我正在使用 Core Data 进行持久存储,我收到下面列出的错误。我查看了这条消息,我知道这与我使用可转换类和自定义类有关。尽管我进行了研究,但我不确定如何解决它。我尝试遵守 NSSecureCoding 协议失败了。我发布我的原始代码是因为我认为从头开始尝试解决问题可能比尝试修复我在 NSSecureCoding 上的糟糕尝试更容易。先感谢您!任何帮助深表感谢。

'NSKeyedUnarchiveFromData' 不应用于取消归档,并将在未来版本中删除

我的实体: 在此处输入图像描述

我的自定义类:

视图控制器:

0 投票
0 回答
195 浏览

swift - NSSecureCoding 协议导致应用程序崩溃

我正在使用具有可转换类型的 Coredata 并收到很多这样的警告:

所以我尝试进行调整,这是我之前的自定义类:

比我把它改成 NSSecureCoding:

并且在 NSManagedObject 内部将 Transformer 更改为 NSSecureUnarchiveFromData:

在此处输入图像描述

第一次运行时一切正常,但在保存内容并重新启动应用程序后,它会因以下错误而崩溃:

我在这里想念什么?

0 投票
0 回答
39 浏览

objective-c - NSSecureCoding VS 保存 id

我在objective-c,macOS上。

我目前正在重写一个应用程序以支持 NSSecureCoding 协议。在某些类中,我有一些像这样的属性

这些对象可以是非常动态的类型(NSString,自定义对象......)在加载时我之前这样做过:

使用 NSSecureCoding 我需要指定我显然无法使用 id 的类。所以这是我的问题:

  1. 传递一个像 NSObject 这样的超类是否可以,即使它基本上是一个 NSString?

    但是……这不是抵消了 NSSecureCoding 的想法吗?

  2. 还有另一种(更好的)方法吗?

编辑:刚刚看到这对于多个类 decodeObjectOfClasses:forKey: 是可能的 - 正确的方法是列出所有可能的类吗?

0 投票
0 回答
52 浏览

swift - SecureCoding with Subclasses 和 CoreData ni swift

我想在 CoreData 字段中实现不同的可能值作为 Transformable 和子类。Swift 似乎不喜欢我的实现:(超类)

子类:

现在错误:Class 'xx.ResponseItemValueTextDTODB' has a superclass that supports secure coding, but 'xx.ResponseItemValueTextDTODB' overrides -initWithCoder: and does not override +supportsSecureCoding. The class must implement +supportsSecureCoding and return YES to verify that its implementation of -initWithCoder: is secure coding compliant.

如果我取消注释子类中的行,快速编译器也不喜欢它,错误:Cannot override with a stored property 'supportsSecureCoding'在那一行

我应该如何让 NSSecureCoding 开心?

0 投票
1 回答
98 浏览

core-data - 将 NSValueTransformer 更改为 NSSecureUnarchiveFromDataTransformer 以获取核心数据警告

在我的核心数据模式中,我在实体中有一个“可转换”属性,该属性使用 a NSValueTransformer,其目的是将 UIImage 转换为 NSData 并进行一些压缩。从这个属性,我最近开始收到这些关于使用的警告NSKeyedUnarchiveFromData

'NSKeyedUnarchiveFromData' 不应用于取消归档,并将在未来版本中删除

所以我读到了这个(链接)并认为我需要将其更改NSValueTransformer为使用NSSecureUnarchiveFromDataTransformer......但是在进行更改之后(据我从文章中了解的最好)我无法让它工作,现在访问属性时应用程序崩溃。

这是现有的NSValueTransformer

所以我将它改为子类NSSecureUnarchiveFromDataTransformer,并将以下内容添加到实现中:

然后,在访问 Core Data 持久存储之前,我“注册”了转换器:

现在警告消失了,但应用程序在读取图像时崩溃:

-[__NSCFData _rasterizedImage]:无法识别的选择器发送到实例 0x7ff53c108800

如果我将变压器改回NSValueTransformer,它工作正常。所以我不确定我是否在实现中遗漏了一些东西,或者我误解了“NSSecureUnarchiveFromDataTransformer”的前提。很想知道我能做些什么来解决这个问题。

0 投票
1 回答
504 浏览

swift - Swift - 如何使用 NSSecureCoding 对 Bool 类型进行编码

我在 Swift 应用程序中使用 NSSecureCoding 保存 Bool 变量时遇到问题。

我对 Objective-C 没有任何经验,而且我对 Swift 比较陌生(我有 ac# 背景)。据我了解,使用 NSSecureCoding 需要我们在 Objective-C 中使用字符串和 int 对应项——即 NSString 和 NSNumber。我能够以这种方式成功地编码和解码整数和字符串:

但是,我不确定如何处理布尔值。我试过这个:

但这总是打印:Optional(1)与 myBool 的初始值无关。任何帮助将不胜感激。谢谢。

0 投票
1 回答
276 浏览

objective-c - 核心数据中的 NSSecureCoding 崩溃

当我通过获取请求从我的核心数据实体获取时,我收到了来自用户的崩溃报告。这是崩溃的样子:

SIGABRT:故障期间发生未处理的错误(NSCocoaErrorDomain,4864)并被抛出:错误域 = NSCocoaErrorDomain Code = 4864“无法读取数据,因为它的格式不正确。” UserInfo = {NSUnderlyingError = 0x2822582d0 {Error Domain = NSCocoaErrorDomain Code = 4864“键'NS.objects'的值是意外类'NSTextAlternatives(0x1ffa90890)[/System/Library/PrivateFrameworks/UIFoundation.framework]'。允许的类是' {("NSTextAttachment (0x1ff3bc730) [/System/Library/PrivateFrameworks/UIFoundation.framework]", "NSNumber (0x1ff35d8c8) [/System/Library/Frameworks/Foundation.framework]", "NSDictionary (0x1ff352418) [/System/Library /Frameworks/CoreFoundation.framework]”、“NSFont (0x1ff3bc3e8) [/System/Library/PrivateFrameworks/UIFoundation. NSAttributedString (0x1ff359c00) [/System/Library/Frameworks/Foundation.framework]", "NSURL (0x1ff352e18) [/System/Library/Frameworks/CoreFoundation.framework]", "NSSet (0x1ff352878) [/System/Library/Frameworks/ CoreFoundation.framework]”、“NSValue (0x1ff35d940) [/System/Library/Frameworks/Foundation.framework]”、“UIFont (0x1ff3bc780) [/System/Library/PrivateFrameworks/UIFoundation.framework]”、“NSString (0x1ff35d170) [ /System/Library/Frameworks/Foundation.framework]" )}'。" UserInfo={NSDebugDescription=键“NS.objects”的值属于意外类“NSTextAlternatives (0x1ffa90890) [/System/Library/PrivateFrameworks/UIFoundation.framework]”。允许的类是 '{("NSTextAttachment (0x1ff3bc730) [/System/Library/PrivateFrameworks/UIFoundation.

它崩溃的那一行NSFetchedResultsController是调用的performFetch时间:

7 CoreData 0x00000001b48c1a94 __43-[NSFetchedResultsController performFetch:]_block_invoke + 572 8 CoreData 0x00000001b487c01c developerSubmittedBlockToNSManagedObjectContextPerform + 152 9
CoreData 0x00000001b474eda4 -[NSManagedObjectContext performBlockAndWait:] + 204 10 CoreData 0x00000001b475cae4 -[NSFetchedResultsController _recursivePerformBlockAndWait:withContext:] + 144 11 CoreData 0x00000001b475cc1c -[NSFetchedResultsController performFetch :] + 220

这几乎肯定会发生,因为我最近将一个没有任何转换器集(因此基本上使用NSKeyedUnarchiveFromDataTransformerName)的 Transformable 属性更改为使用NSSecureUnarchiveFromDataTransformer. 该属性存储NSAttributedString来自UITextViewiOS 应用程序中的 a 。我还将“粗体”和“斜体”项目的 NSRange 保存为 NSValue。

我添加了以下变压器:

这个“转换器”用于核心数据模型中的可转换属性。它将NSValue类添加到允许的类列表中。

当它说“键'NS.objects'的值是意外类'NSTextAlternatives”时......我不确定是什么NSTextAlternatives。我从来没有(明确地)在我的代码中使用过这个。任何想法可能来自哪里?

编辑:在进一步调查中,事实证明 NSAttributedString 可以附加各种对象,例如NSTextAlternativesand的对象,_UITextInputDictationResultMetadata如果用户在 UITextView 上使用听写,则可能存在这些对象。因此NSSecureUnarchiveFromDataTransformer,在技术上支持 NSAttributedString 的 ,实际上并没有正确支持它。这些类来自私有框架,所以不确定如何将它们添加到我的自定义转换器中。除了提交错误之外,不确定是否有解决方法。如果有,请告诉我。

0 投票
0 回答
26 浏览

nssecurecoding - 具有原始类型的 NSSecureCoding

我有一个MyCustomClass具有四种不同类型属性的类对象:

我采用了 NSSecureCoding 并对我的课程进行编码:

然后我解码它:

所以:

为什么我只需要NSColor在我允许的课程中?尽管我没有添加 NSData 或 NSNumber,但所有这些代码都有效,因为我假设 KVC 正在处理将原始类型(NSInteger 和 double)转换为 NSNumber。