问题标签 [transformable]

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 投票
1 回答
1011 浏览

ios - iOS 核心数据可转换

我对 iOS CoreData 实现比较陌生。这是我的问题:

我有一个实体,它有一个“资产”字段,可能包含一种或多种不同类型的对象。它在另一个的子对象中。存储它的最佳方法是什么以及如何检索它。

我的伪代码示例:

在 Person.asset 中,它可以是一个或几个不同类对象的组合:

我目前的储蓄方法是创建个人类型的资产并添加到个人;

在我保存上下文之前,以下似乎有效,我可以通过以下方式访问 Person 对象:

直到我保存上下文并重新加载应用程序。在加载应用程序时,我获取 Group 对象,然后尝试执行上面相同的代码。它似乎指向正确的人员对象,但在 person.type 行上失败,我最终得到一个错误:[error] error: exception handling request: , -[Asset initWithCoder:]: unrecognized selector sent to instance 0x60c00027e040用户信息为(空)

我相信我在保存和获取时可能需要对资产字段进行某种编码?即使我试图访问该人的 type 属性,错误仍是在引用资产。提前感谢您的帮助。

0 投票
1 回答
1132 浏览

ios - iOS (Swift):核心数据可转换属性

我有一个采用协议的简单Time类:NSCoding

我想成为我实体的Transformable属性:Watch

如此处所示:

在此处输入图像描述

我成功地将它保存到托管对象上下文中,但是当我重新加载应用程序时,time属性是nil.

我在这里错过了什么吗?为什么这个属性没有成功保存?这似乎是其他帖子所需的全部内容。

非常感谢您的帮助!

0 投票
1 回答
1025 浏览

ios - 核心数据-[Decodable.Address initWithCoder:]:发送到实例的无法识别的选择器

我已经使用 swift Codable实现了 JSON 解析并将其存储在Coredata中。我的代码在存储 JSON 和获取没有“可转换”属性的实体时工作正常。但是如果它的任何属性是可转换的,那么获取实体会失败并崩溃并显示以下日志。如果是自定义对象,我需要保留可转换属性。看看下面的核心数据模型类并为我的实现获取请求。控制台日志:

ViewController.swift

诊所+CoreDataClass.swift

诊所+CoreDataProperties.swift

地址+CoreDataClass.swift

地址+CoreDataProperties.swift

我尝试在 Clinic+CoreDataClass.swift 中实现 initWithCoder: 但它给出错误 - 无法调用 initWith(entity: insertInto:)。我需要实现 initwith(entity: insertinto:)

0 投票
1 回答
215 浏览

ios - UITableView "cellForRowAt: indexPath" 偶尔调用 Core Data 属性上的 "init?(coder aDecoder: NSCoder)"

我有一个核心数据实体,其类型Person为可转换属性。ageAge

Age采用NSCoding协议,有两个变量valuescale,但只value保存了 :

我在一个 中显示age一个实例PersonUITableViewCell。此实例 ( person) 的年龄值为 10.0,即person.age.value = 10.0,因此当以编程方式将比例更改为scale = 2.0通过 aUIStepper时,UITableViewCell显示20.0(即scale * value)。

但是,我发现如果我增加了足够多的次数,最终会在方法期间调用的类UIStepper的初始化,该方法返回给定的实例。这显然会导致类中的方法被调用,从而将属性的值重置为 1。AgePersontableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCellPersonIndexPathinit?(coder aDecoder: NSCoder)Agescale

请问为什么会发生这种情况,有没有办法解决这个问题?理想情况下,我希望该scale属性的值始终保持在UIStepper.

感谢您对此事的任何帮助。

编辑

通过以下方式获得给定person的 at an :indexPath

0 投票
1 回答
586 浏览

ios - CoreData 可转换:自定义转换器永远不会被调用 - 使用 NSKeyedArchiver

我创建了一个简单的 CoreData 模型,其中包含一个具有自定义可转换属性的实体:

核心数据配置

然后,在 AppDelegate 中,我尝试获取并保存单个实体:

我第一次运行应用程序时得到nil,而第二次得到Optional("String attribute"),这似乎转换工作正常。

但是,这是我的变压器类:

似乎 CoreData 使用NSKeyedArchiver/Unarchiver而不是我的自定义类。可能是什么问题呢?

显然,这是我设置的一个测试项目,目的是弄清楚可转换属性是如何工作的,并测试我正在处理的真实项目中面临的一个更大的问题。

配置项目以调查问题

0 投票
1 回答
369 浏览

swift - Set的安全编码

我的应用程序使用存储自定义类实例的核心数据CustomClass
此类具有许多属性,其中大多数是标准类型,但一个属性是xxx: Set<CustomObject>.
因此xcdatamodeld指定(在其他标准类型xxx中) type的属性TransformablexxxSet<CustomObject>。它的类型是Optional,Transformer 现在是NSSecureUnarchiveFromData
之前没有指定 Transformer,因此解码不安全。但 Apple 现在建议使用安全编码,因为将来不推荐使用不安全编码。

为了启用安全编码,我做了以下事情:
CustomClass现在采用NSSecureCoding而不是NSCoding.
以下内容var已添加到CustomClass

然后我尝试修改public required convenience init?(coder aDecoder: NSCoder) {…},以便xxx安全地解码该属性。我知道,而不是

我必须使用 now decodeObject(of:forKey:)of要解码的对象的类型在哪里,这里是 type Set<CustomObject>
我的问题是我不知道如何制定这个:如果我使用

我得到错误Cannot convert value of type 'Set<CustomObject>.Type' to expected argument type '[AnyClass]?' (aka 'Optional<Array<AnyObject.Type>>‘)
显然编译器没有编译

但反而

即它Set<CustomObject>不被视为单一类型,而是作为类型的集合。

那么,我如何指定只应解码一种类型,即Set<CustomObject>

0 投票
2 回答
3248 浏览

ios - 核心数据错误切换到使用“NSSecureUnarchiveFromData”或 NSSecureUnarchiveFromDataTransformer 的子类

我收到此 CoreData 错误。我不知道为什么会收到此错误。我没有使用任何可转换类型。我在我的代码中看不到任何东西表明我正在使用可转换的属性。在创建项目时,我通过选择 Use Core Data 选项让 Xcode 设置 CoreData。其他类似的问题没有帮助,因为答案与我能找到的任何在创建项目时创建的 Xcode 的代码有关。当此错误出现在调试窗口中时,项目不会崩溃。我正在使用 Xcode 11.3 和适用于 iOS 12 的 Google Maps SDK,它在装有 iOS 13.3 的 iPhone 8 设备上运行。

这是触发错误的代码:

我正在使用以下核心数据对象:

地址实体

位置属性

输入整数 16

文本属性类型字符串

时间戳属性类型日期

路由关系destination 路由反向地址

路由实体

时间戳属性类型日期

标题属性类型字符串

地址 关系 目的地 地址 反向 路由

我有以下托管对象类的代码:

0 投票
1 回答
40 浏览

ios - 如何存储 [[string]] 并从核心数据中获取它?

我有这样的 [[string]] 示例数组 [["A", "B", "C"], ["A"], ["B", "C"], ["C"], [ "B"], ["B", "C", "A"]]

我将它存储到这样的核心数据中:

哪个角色是 API 的数组结果(在追加循环之后)var roless = [[String]]()

核心数据存储在列表中var coreHeroList: [NSManagedObject] = []

但是当我尝试从核心数据中获取并存储它(在removeall之后)时:

它给出红色错误:无法将类型“[[String]]”的值转换为预期的参数类型“[String]”

我的变形金刚是这样的: 在此处输入图像描述

我将核心数据设置为手动并已设置 NSManagedObject SubClass

如何从核心数据中获取 [[string]]?我对核心数据的插入是否错误?

0 投票
0 回答
80 浏览

graphics - (D)SFML自动更新形状位置

我在 D 中创建了一个简单的小程序,其中包含对 SFML 的 D 绑定。我目前正在阅读有关自定义转换和自定义形状的信息。

现在我创建了一个类

这是 D 代码,但我认为除 之外的大部分内容mixin在 C++ 中应该完全相同。

现在我的问题主要是关于方法body.position = this.position;中的这一行draw

是否需要手动更新形状的位置?这似乎有点错误,但我没有找到任何资源来告诉我如何自动化这个过程。这样做draw对我来说也有点像致命的罪过。

所以基本上我的问题是:

如何根据可转换接口中的方法发生的事情来绘制自己的可绘制对象。

或者更简单:

如何自动同步对象和形状的位置、比例、旋转等?

0 投票
1 回答
712 浏览

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

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

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

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

我的自定义类:

视图控制器: