问题标签 [nsvaluetransformer]

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 回答
127 浏览

swift - ValueTransformer 中没有覆盖功能?

自从我上一个问题以来,我一直在尝试让 ValueTransformer 将 NSSlider 的值转换为整数。

背景:我有一个绑定到共享用户默认控制器的 NSSlider。文本标签也使用相同的键绑定到共享用户默认控制器。我需要文本字段只显示 Int。

现在我的代码如下所示:

对于这两者,NSLider 和我在 bindingsInspector 中设置的标签是 Value Transformer on IntegerTransformmer

在 AppDelegate 中,我像这样初始化 ValueTransformer:

建筑物没有错误,但在我的标签中,我仍然得到 DoubleValues。为什么我不允许做transformedValue(value: Any?)覆盖?这是它不起作用的原因吗?任何形式的帮助将不胜感激。

0 投票
1 回答
65 浏览

ios - 了解 CoreData 中 Transformables 的错误

我的应用程序存在问题,从数据库中删除大量数据需要很长时间。所以我开始调试并发现,值转换器是问题所在!

为了查看问题,我创建了一个隔离问题的项目......

我有以下内容:

所以Entity A与 有 1:1 的关系Entity B。并且Entitiy B有一个名为propertyTransformable 的属性,并且有一个 ValueTransformer。A 到 B 的删除规则无效。

现在我创建 A 和 B 的一个实例,将它们链接起来并将一些内容写入属性。保存上下文,一切都按预期工作。

现在我想删除Entity A. 我创建了一个获取请求,并删除了所有实体。在我的示例中,我这样做:

现在,当保存发生时,值转换reverseTransformedValue器被调用。我不明白为什么?!?因为我没有访问该属性...我没有设置或获取它...

如果有人可以为我提供一些启示,那就太酷了。

我在这里也有我的示例项目:https ://www.dropbox.com/s/651dmyughosr90p/ValueTransformerIssue-Sample.zip?dl=0

0 投票
1 回答
108 浏览

objective-c - NSCollectionView 删除 ManagedObject 导致 NSValueTransformer 运行问题

我有一个显示原型项目网格的 NSCollectionView,这一切都通过核心数据、接口绑定和 NSValueTransformer 处理,如果不存在真实图像,则在 NSCollectionViewItem 内显示占位符图像。

当我想从 NSCollectionView 中删除一个项目时,它会从集合视图中删除它,但会在它从视图中消失之前闪烁我的占位符图像(从我的 NSValueTransformer 子类触发)一微秒。

当 NSValueTransformer 检测到 MOC 中的对象已被删除时,我找不到停止运行的方法。为什么它甚至在运行?

我采取的步骤是:

如果我只是从 MOC 中删除对象(而不从 arrayController 中删除),它将使占位符图像闪烁一微秒。

有没有办法阻止 MOC 对象的删除导致 CollectionView 在将其从视图中删除之前运行 NSValueTransformer?

我尝试在 ArrayController removeObject 和 MOC deleteObject 之间添加延迟,该延迟修复了图标的闪烁,但如果用户一次性删除一组项目,则会导致 Core Data 字段不能为 nil 错误。

在从集合视图中删除对象之前阻止占位符图像闪烁的任何想法?

0 投票
2 回答
1709 浏览

json - 核心数据中具有自定义类型的所有属性都必须是关系吗?

这是以下评论中的后续问题如何映射嵌套的复杂 JSON 对象并将它们保存到核心数据?.

想象一下,我的应用程序已经有了这个代码。

现在我决定为我的应用程序添加持久性。我只想一张旅行表。我想显示旅行下的乘客,但不需要表格来直接查询乘客。它只是旅行的自定义对象/属性。每次我访问乘客时,都会通过 Trips。

那么有没有一种方法可以创建一个名为“TripEntity”的 NSManagedObject 的新子类并存储我的乘客——无需 1. 为“Passenger”创建另一个 NSManagedObject 子类 2. 在乘客和旅行之间创建一个反向关系的关系?简单地说,我只是希望它成为一个属性。从概念上对我来说,它也只是一个属性。真的不是什么关系...

或者,一旦您使用 Core-data,那么每个自定义类型都需要明确地成为 NSManagedObject 的子类?否则不会持久化。我猜这也是对象的含义。你的图表需要是完整的。图表之外的任何内容都将被忽略...

我问这个是因为我真正想要存储的 JSON 对象是巨大的,我正试图减少需要完成的工作。

0 投票
0 回答
53 浏览

ios - 添加NSSecureUnarchiveFromDataTransformer后保存NSManagedObjectContext为什么会出现不一致?

我有一个使用 Core Data 来持久存储Events的应用程序。

Event有一个可选的location(存储为 a CLLocation)作为其属性之一。在我的模型中,此location属性的类型为 Transformable:

Transformable 类型的 location 属性

我的应用程序已经投入生产好几年了,一切都在可靠地运行,但在过去的一年中,我开始在 Xcode 控制台中收到一个错误,告诉我应该改用“NSSecureUnarchiveFromData”或 NSSecureUnarchiveFromDataTransformer 的子类

在做了一些研究之后(我认为自己是 Core Data 的新手),我决定我应该编写一个NSSecureUnarchiveFromDataTransformer子类并将该类的名称放在属性的Transformer字段中,该location属性是空白的,带有Value Transformer Name占位符文本:

空白变压器字段

根据我在网上找到的内容,对于包含以下内容的 Transformable 属性,子类可能非常简单CLLocation

所以,我在我的项目中创建了这个子类,并将类名放在属性的Transformer字段中location

填写的变压器字段


但是现在,问题出现了: 在实现 Transformer 后开始使用我的应用程序后,我开始得到不可预测的结果。

有时,当我创建一个新的 时Event,它会在下一次应用启动时消失。Core Data 并没有在应用程序启动时保留它,就像在更改之前一样。

有时Events 得救了,但有时却没有。

我想不出一个清晰的模式。location如果在首次创建时包含 ,则它们并不总是被保存 ,但有时它们会被保存。似乎其他时候原件Event被保存了,但location如果location是后来添加的,则没有。

我省略了样板核心数据代码,但基本上我有baseManagedObjectContext,这是连接到NSPersistentStoreCoordinator将数据保存到磁盘的层。

baseManagedObjectContext是 的父mainObjectContext级,我的大部分 UI 都使用它。然后我创建私有上下文以在保存更改之前先写入更改。

Event这是使用可能创建一个新location对象并保存它的示例代码,在将NSSecureUnarchiveFromDataTransformer子类添加location. 我添加fatalError了调试,但它从未被调用,即使我的数据没有完全保存到磁盘:

通过进一步调试,我发现有时,即使更改为mainObjectContext,它也没有一直到baseManagedObjectContext或磁盘。我创建了一个完整的独立核心数据堆栈,用于测试直接从磁盘读取。

这个保存不传播的问题(就像他们以前多年来所做的那样)是导致数据在应用程序启动时无法持续存在的原因,但我不明白为什么在我添加Transformer后突然开始发生这种情况location

Core Data 是如何工作的,我在这里缺少什么?

当我从一个空白的Transformer字段切换到NSSecureUnarchiveFromDataTransformer.

我想采用NSSecureUnarchiveFromDataTransformer,因为 Apple 推荐它。我怎样才能改变我正在做的事情才能采用它并一致地保存数据?

现在,我已经切换回空白的Transformer字段,以使事情像以前一样工作。

0 投票
1 回答
48 浏览

core-data - 在 SwiftUI 生命周期应用程序中,我应该在哪里注册 CoreData 转换器值?

我正在尝试遵循本教程:

https://www.avanderlee.com/swift/valuetransformer-core-data/

但我不知道在哪里(以及如何!)确切地使用

作者说在设置持久化容器之前先做这件事……我想我是在这里做的:

但是我不知道到底要写什么,或者这是否是正确的地方。也许我应该在不同的地方做?

0 投票
0 回答
25 浏览

swift - 将 ImageView 绑定到资产目录

我有一个绑定到 myArrayController 的 NSTableView,控制一个看起来有点像这样的对象

在我的表格视图中,我有一个带有 NSImageView 的列,我想将其绑定到关联对象的“图像”值。

在我的 Assets.xcassets 库中,我有图像集。

现在这就是我的知识停止的地方。

对于绑定,我有 3 个选项

  • 价值
  • 价值路径
  • 价值网址

仅将与图像集名称相对应的字符串传递给这些选项中的任何一个都不起作用。

所以,我想我需要使用一个值转换器,但我不知道如何设置它。

非常感激你的帮助

顺便说一句,这都是 MacOS/Swift

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 回答
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 回答
46 浏览

nsvaluetransformer - 如何为存储在核心数据中的属性字符串实现 NSAttributedStringValueTransformer

我有一个应用程序,它使用 Core Data 中的 Transformable 属性来存储 NSAttributedStrings 并获取编译器警告

NSSecureUnarchiveFromDataTransformerName 不支持 NSAttributedStrings 的归档和取消归档,因此据我所知,我必须创建一个自定义转换器,在 AppDelegate 中注册它并在核心数据模型对象属性详细信息中输入转换器类名称。

下面是自定义转换器类,但是在尝试解码现有属性字符串时出现错误。任何人都可以对此有所了解吗?为什么新的 unarchiver 无法处理 NSFileWrapper ,因为这是 NSTextAttachment 的一个属性并且可以与已弃用的 unarchiver 一起正常工作?

这是一个错误还是故意的?

有没有办法添加对取消归档 NSFileWrapper 的支持?

结果错误: