问题标签 [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.
ios - 在 Core Data 中存储 NSURL 的正确方法是什么?
我正在尝试在 Core Data 对象中存档/取消存档 NSManagedObjectID,以便下次我的应用程序启动时,我可以检索这些 ID 并使用它们来获取特定对象。
我尝试像这样“归档”ID:
然后像这样取消归档(我只是去 [anyObject] 因为我正在测试,此时只有一个):
但是当我尝试像上面那样获取 URL 时,我得到以下异常:
实体中的属性是通过 Xcode 设置为“可转换”的,我将 Xcode 中的转换器值字段留空,因为核心数据文档似乎暗示如果为空则使用默认转换器。
我究竟做错了什么?
ios - NSValueTransformer 加密数据
我想在 NSValueTransformer 的帮助下加密一些核心数据列。这个想法是,我使用可转换的数据类型并为我的数据类型定义一些转换器。在转换方法中,我想加密/解密该值。我定义了一个实际上什么都不做的转换器——加密的东西目前还没有实现。
方法
使用有效值调用但在获取对象时出现此错误:
*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSCFString 字节]:无法识别的选择器发送到实例 0xf5859f0”
有什么想法有什么问题吗?
编辑:
我意识到我必须转换为 NSData ,反之亦然。现在它工作正常
cocoa - Cocoa:如何将布尔属性绑定到 NSCellStateValue?
我想将 an 的布尔enabled
属性绑定到 anNSTextField
的状态NSButton
。我已经尝试添加一个自定义NSValueTransformer
,将状态转换NSButton
为NSNumber
. 但是,在这种情况下,由于某种原因,文本字段一直被禁用。我的第二种方法:糟糕也失败了,因为NSValueTransformer
不提供返回原语类型,例如BOOL
.
示例:
屏幕截图显示了一个示例,其中文本字段被禁用,因为复选框的状态为NSOnState
。我也想将标签绑定到这个状态。
此外,如果我可以在 Interface Builder 中设置“禁用文本” ,那将很方便。在上面的示例中,我在关联类中设置了文本。
编辑:
我将帐户文本字段的启用self.anonymousLoginCheckbox.state
属性设置为模型键路径。密码文本字段类似。但是,它不起作用。
更新:
我在 GitHub 上创建了一个示例项目,展示了Nicolas Bachschmidt 所描述的实现。
objective-c - 用于核心数据中 C 结构的 NSValueTransformer
如何NSValueTransformer
为 C 结构创建一个,例如CGRect
Core Data 中的一个?
显然transformedValue
&reverseTransformedValue
要求 and id
。有没有办法通过 avoid*
或更好的方法来做到这一点?
objective-c - NSPopupButton 与 Value Transformer 的绑定
我不知道我看到的由带有值转换器的绑定填充的弹出按钮是否是它应该是的方式 - 我看到的不寻常的事情(至少就我所看到的而言)值转换器和表格视图)是transformedValue:方法中的“值”参数是绑定到数组控制器的整个数组,而不是数组中的单个字符串。当我使用表格视图完成此操作时,为表格中的每个显示行调用一次转换器,并且“值”参数是绑定到该行和列的任何对象,而不是用作内容数组的整个数组用于阵列控制器。
我有一个非常简单的应用程序来测试它。在应用程序委托中有这样的:
在 RDTransformer 类中是这样的:
在 IB 中,我在窗口中添加了一个 NSPopupButton,在对象列表中添加了一个数组控制器。控制器的内容数组绑定到 App Delegate.theData,弹出按钮的内容值绑定到数组 Controller.arrangedObjects.name 和值转换器 testTransformer。
当我运行程序时,transformValue: 方法的日志是这样的:
从我在 SO 上看到的情况来看,这似乎不是其他人的经历。绑定或值转换器有什么我做错了吗?
objective-c - Core Data 实体中的可转换属性可以是指向 c 结构的指针吗?我的变压器没有被调用
我正在尝试创建一个 CoreData 持久实体。该实体有一些属性,其中之一是非标准属性 state。state 属性是一个指向包含一些属性的 C 结构的指针。这是我的数据模型的样子:
实体:
MDInstance
属性:
- 持续时间:整数 16
- 移动:整数 16
- 名称:字符串
- 状态:可变形。我将 Transformer 设置为 MDStateTransformer。
我生成了我的类并编辑了 state 属性。这是界面的样子:
这是实现的样子:
我创建了一个名为 MDStateTransformer 的值转换器。实现这一点(可能)并不重要。可以说我已经allowsReverseTransformation
返回YES
,transformedValueClass
返回[NSValue class]
,并且我已经实施transformedValue:
并且reverseTransformedValue:
最后,我在我的 AppDelegate 中注册了 MDStateTransformer,application:didFinishLaunchingWithOptions:
如下所示:
如果我创建我的 MDInstance 的新实例,设置它的属性 - 包括状态属性 - 然后尝试保存实体,我的转换器永远不会被调用。
我在转换器的 init 方法中设置了一个停止点,它正在被实例化。我放了另一个,transformedValue:
它的功能没有被调用。
但是,如果我更新我的 MDInstance 以使状态属性不是指针,而只是一个状态结构,并且我更新转换器以使用结构而不是指针,transformedValue:
则调用 。
是否可以在作为 ac 结构指针的对象上具有自定义属性?如果是这样,任何想法我做错了什么?
ios - 核心数据加密
我有一个关于核心数据加密的问题。我将一些敏感的用户数据存储在 Core Data SQLite 数据库中。关键值都是可转换的,我正在使用 AES256 对它们进行“动态”加密和解密,包括每个值的单独 IV。加密密钥是用户选择的密码的 SHA512 哈希。到目前为止,这非常有效。
现在关于用户密码。当用户启动应用程序时,系统会要求他输入密码。密码使用 SHA512 进行哈希处理并存储在 iOS 钥匙串中。对于每个写入或读取操作,NSValueTransformer 将从钥匙串中获取密码。如果应用程序正在关闭,我会从钥匙串中删除密码哈希。
在我的核心数据数据库中,我有一个特殊的实体,它有一个随机数!= 0,因为它是唯一的值。为了测试用户是否输入了正确的密码,我获取了这个实体并读取了这个数字。如果是=!0,我知道密码是正确的,因为当解密失败时 NSValueTransformer 总是返回 0。
现在我的实际问题是:您认为这是一种很好的加密方法吗?如果输入的密码正确,您将如何测试?
我有点担心在应用程序运行时将密码哈希存储在钥匙串中会使一切变慢,因为 NSValueTransformer 必须一直访问钥匙串。将密码哈希保存在内存中是否足够安全,以便在应用程序关闭时将其删除?
ios - 是否可以有条件地禁用 NSManagedObject 属性的 NSValueTransformer?
具体来说,假设我有一个 NSManagedObject,其“statusCode”属性设置为可转换,还有一个可逆值转换器子类可以从 NSStrings 转换为 NSNumbers,反之亦然。这个想法是使用值转换器,以便我接收 JSON 和来自 JSON 中的“状态”键的字符串自动映射到表示 NSManagedObject 中的状态代码的 NSNumber。相反,如果我将 NSManagedObject 上传到服务器,此时其状态属性将从 NSNumber 转换为 JSON 的字符串。
到现在为止还挺好。但是,如果我还希望能够从 NSManagedObjec 的 status 属性中获取一个简单的 int,以便我可以将其与代码中的枚举进行 AND 操作,该怎么办?也就是说,我会撒谎以涵盖 3 种情况:
myManagedObject.status = [JSONResponse valueForKey:@"status"]
(应该使用转换器来做 NSString -> NSNumber)[JSONforUpload setValue:myManagedObject.status forKey:@"status"]
(应该使用transformer来做NSNumber->NSString)- 从代码中的其他地方,任何类似于以下内容的内容:
if(myManagedObject.status & statusInProgress) ...
其中 statusInProgress 是一个枚举。
我想我可以暂时禁用值转换器,但是我不知道 NSManagedObject 是否有对它的引用,或者我是否应该从 NSValueTransformer 类中禁用它,这显然保留了一个已注册的转换器表?
我知道对于第三种情况,我可以做[myManagedObject.status intValue]
然后做按位比较,但我想知道intValue]
从这个对象的用户的角度来看,是否有任何方法可以自动返回。
有任何想法吗?
ios - 直接在代码中获取/设置属性时,Core Data 不会自动调用值转换器
如果我理解正确,Core Data 可转换属性背后的想法是:
- 实现一个
NSValueTransformer
带有返回的子类[NSData class]
及其+transformedValueClass
转换实现 - 注册变压器
+load
或+initialize
- 将实体的属性设置为可变形
- 在 xcode 模型编辑器中为属性设置名称(用于注册它的名称)。
在这一点上,我希望访问或设置适当实体类型的 managedObject 中的属性会触发值转换器。但是,我正在使用的应用程序中对此进行测试,AFIncrementalStore
并得到以下行为:
- A - 注册变压器
+load
或+initialize
似乎没有必要; 无论如何,Core Data 都会找到它(尽管请提前阅读)。 AFIncrementalStore
B - 通过触发转换器获取请求。例如,我从获取请求中获取 JSON,当将响应字典映射到 managedObject 时,会触发转换器并将适当的字典键转换NSData
为对象中的。- C - 但是,如果我尝试通过代码设置或获取属性,则不会调用转换器。这样做
myManagedObject.myAttribute = @"hello"
不会触发从NSString
to的转换NSData
,也不会NSString *myString = myManagedObject.myAttribute
触发从NSData
to的转换NSString
。
那么我错过了什么?我认为这个想法是 CoreData 会自动调用转换器。我错了吗?
根据这个问题:为什么我的可转换核心数据属性不使用我的自定义 NSValueTransformer? 这似乎是 Apple 框架中的一个错误。但是让我失望的是,通过 AFIncrementalStore 确实调用了值转换器。也许关键是通过代码设置一个属性,我并没有真正触发 AFIncrementalStore ,所以改变只是在内存中?
ios - 将自定义类保存到 Coredata
嗨,我使用了可转换的属性类型,并且我遵循了在其中一个论坛中存档的程序。
但它说
CoreData:警告:在实体“SurveyData”2013-04-30 09:44:16.022 TestReachability[11641:c07] -[SurveyApplication encodeWithCoder:] 上找不到属性“survey”的类名为“SurveyResults”的 NSValueTransformer:已发送无法识别的选择器到实例 0x845cb00 2013-04-30 09:44:16.023 TestReachability[11641:c07] *由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[SurveyApplication encodeWithCoder:]:无法识别的选择器发送到实例 0x845cb00”
这是我的代码
SurveyAppplication 对象是我的自定义类,我正在尝试创建一个对象,然后将其存储核心数据。请您帮帮我。
谢谢 Dheeraj