问题标签 [transient]
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.
iphone - 即使定义了依赖键,我是否必须手动更新瞬态属性?
不久前我开始使用瞬态属性,并认为我对它们非常了解,但是这个并没有像我想象的那样表现。它在数据模型中被定义为具有未定义类型的瞬态属性,因此被声明为属性:
该属性被声明为依赖于该对象上的另一个 1:M 关系:
我已经为这个瞬态属性实现了一个相当标准的 getter:
不起作用的部分是,manufacturers
当从该对象的关系中添加/删除对象时,缓存的原始值似乎没有被清除lines
。当manufacturers
您添加/删除行时肯定会调用访问器,但[self primitiveManufacturers]
仍会返回旧的缓存值(这显然是非零),因此不会调用重建当前制造商集的代码,我最终会得到一个输出-过时的返回值。
我是否误解了缓存的瞬态属性值应该如何工作?或者我是否应该在通过某种 KVO 回调更改行时手动取消缓存值,以便下次manufacturers
访问“if”中的更新代码?
非常感谢任何帮助。
编辑:我知道我基本上是在模拟与此瞬态属性的 1:M 关系(即瞬态关系,因为需要更好的词),而且我也知道文档警告不要使用setPrimitiveValue:forKey:
for 关系:
您通常应该只使用此方法来修改属性(通常是瞬态的),而不是关系。如果您尝试为新的 NSMutableSet 对象设置一对多关系,它将(最终)失败。在异常情况下需要使用此方法修改关系,首先使用primitiveValueForKey获取现有集合:(确保该方法不返回nil),创建可变副本,然后修改副本
但是,由于我没有在真正的1:M 关系上设置原始值,只是我模拟的瞬态关系,我假设这个警告不适用于我的用例。
编辑#2:因为我只是试图跟踪何时从集合中添加或删除对象lines
(这是预期值manufacturers
可以改变的唯一方法),而不是试图跟踪对已经存在的对象的属性的更新lines
集合,我认为我不需要像这样重量级的东西:https ://github.com/mbrugger/CoreDataDependentProperties
解决方案:根据下面的答案,我实施了以下解决方案以在更新manufacturers
时将集合清空。lines
任何人都可以看到这方面的任何问题,或者提出任何更有效的实施方式吗?重要的是,此操作要快,因为它是在主线程中完成的,并且会明显延迟在line
更新完成的同时发生的 UI 更新。
scala - @transient 惰性 val 字段序列化
我在 Scala 上有一个问题。@transient lazy val
我用字段序列化一个类的实例。然后我反序列化它,该字段被分配null
。我期待反序列化后的惰性评估。我该怎么办?
以下是示例代码。
core-data - 核心数据和瞬态属性
我在 Core Data 中设置瞬态属性时遇到问题。我要解决的问题是:我有一组使用 Core Data 成功存储的对象。此集合本质上是一个只读集合,但在运行时,我想将另一个对象(在本例中为 UIImage)与集合中的每个项目相关联。我不需要存储 UIImages;它纯粹是一个运行时关联。所以我真正需要的是集合中每个对象中的“占位符”,以后我可以在其中删除 UIImage。
瞬态属性似乎是正确的,为此,Core Data 参考文档告诉我应该在我已经完成的数据模型中设置“未定义类型的可选瞬态属性”:
此外,它告诉我不需要在实现对象中定义相应的属性,但我必须编写自定义访问器和设置器方法。我根据文档中的示例对这些方法进行了建模,如下所示:
和:
还有一个延迟的“写入”方法(willSave),我为了严格的完整性而编写了它,尽管如上所述,我永远不会将这些对象写回存储。
我遇到的问题出在 - (UIImage *)displayImage { 的 primitiveDisplayImage 和 setPrimitiveDisplayImage 方法中。基本上,编译器会对这两种方法发出警告,因为“对象 X 可能无法响应 'primitiveDisplayImage'..”等。但是,我从文档中的理解是这些原始访问器/设置器是自动创建的 - 这似乎不是案子。有谁能帮我解决这个问题吗?非常感谢
java - 将字段标记为瞬态如何使序列化对象成为可能
选项:
A. Foo 的实例可以被序列化,因为 Foo 实现了 Serializable。
B. Foo 的实例无法序列化,因为 Foo 包含不可序列化的实例变量 v3。
C. 如果将 v3 标记为瞬态,则 Foo 的实例是可序列化的。
D. b 和 c
答案:D
说明:一个对象可能不会被序列化,即使它的类实现了java.io.Serializable
,因为它可能包含不可序列化的实例变量。
现在我的问题是:
据我所知,瞬态用于关闭序列化。那么在这种情况下transient是如何帮助我们序列化foo的呢?
grails - Grails 域中的瞬态属性
我有一个名为 People 的 Grails 域,我想检查每个 People 是否有孩子。Childs 是其他 People 对象。这是我的域结构:
但我不能在任何地方调用 people.hasChild() 。你能帮我解决这个问题吗?太感谢了!
ruby-on-rails - 在 Rails 中,有没有办法指定您希望 attr_accessor 成为的类型,并使用内置的 Rails 验证对其进行验证?
我从来没有找到一个很好的方法来做到这一点,所以我想我会问。
例如,在 ActiveRecord 模型中,数据库支持的属性会自动类型转换为适当的数据库支持类型。如果我有一个Category
模型,并且它有几个属性,比如说name
and category_id
,如果我这样做:
Rails 知道这name
是一个字符串并且category_id
是一个整数。
假设我有几个要验证的瞬态/综合属性,它们有特定的类型。我想从表单提交它们,并且我希望它们根据它们的定义方式自动转换为字符串、整数或日期(例如)。
如果我要在 Rails 模型中声明某些内容,例如:
是否有一种内置方式告诉 Rails “我希望你将前者转换为整数,而将后者转换为日期,当我去时Category.new(params[:category])
”,只要params[:category][:some_number_variable]
并且params[:category][:some_date]
是提交给控制器的数据的一部分(我意识到鉴于那里有许多日期格式,日期示例可能有点棘手)。
hibernate - 休眠逆向工程以包含 @Transient 属性
我正在尝试包括以下内容
在我从数据库表生成的 pojo 类中。
我研究发现有一种方法可以在元标记中提及额外的类代码,如下所示
http://www.scribd.com/doc/23123635/30/Guiding-the-reverse-engineering-process
但这不允许添加属性变量照片。
请建议我如何在 reveng.xml 中执行此操作,以便在每次运行 hbm2java 时都包含此代码。
提前致谢!
core-data - 在实体中找不到瞬态属性
我正在尝试从我预先填充的 sqlite 数据库中获取属性(自动)的第一个字母。使用 coredata 从数据库中检索数据没有问题。但是当我尝试从我的瞬态属性中获取数据时,我收到以下错误消息:“NSFetchedResultsController ERROR: object { Autor = "\U00cdtalo Calvino"; } returned nil value for section name key path 'FirstLetter'。对象将被放置在未命名的部分”...
我在我的实体 Cit 中创建了一个名为 FirstLetter 的瞬态属性。我也为实体定义了我的类。
城市信息
西铁城
我无法让它工作。有没有人有解决方案???谢谢!
ios - 核心数据,“按瞬态属性排序”解决方法
假设我有一个名为 Event 的 Core Data 实体,它代表经常性(每年)的事件。每个事件都有一个“日期”属性。
我需要将此事件呈现给按“下一次出现日期”排序的用户。当然,此属性取决于当前日期,因此应标记为瞬态:将其存储在数据库中是没有意义的。
但是,如您所知,您无法通过 Core Data 中的瞬态属性查询排序。
有没有一种聪明的方法来保持这个属性瞬态并且仍然为我排序核心数据?我不想获取然后对自己进行排序,但我也想避免将这些临时信息存储在数据库中。