iOS

调用一个动态获得的 Class 的初始化 protocol 实例方法

问题

标题有点绕,其实就是把:

  1. 通过 runtime 根据字符串获得某个 Class,用这个 Class 创建且初始化一个实例。
  2. 某个类实现了一个 protocol,这个 protocol 定义了某个自定义的 init 方法,创建出来的实例需要通过这个 init 方法来初始化。

这两种需求结合在一起。准确来说就是通过 runtime 获得了一个实现了某个 protocol 的 Class,现在创建这个 Class 的一个实例并且调用 protocol 的 init 方法来初始化。上面两个需求,单独一个都能很简单地完成,然而结合在一起之后就不是那么简单了。

在 Core Data 中存取 transformable 类型的数据

在开发过程中有一个需要在 Core Data 中存取 NSDictionary 的需求,但是在 Core Data 的 attributeType 中并没有直接支持 NSDictionary 的类型,基本上就是一些 scalar 类型和 date、binary data、undefined 和 transformable 类型。

最初的想法是把 NSDictionary 转为 NSData 然后用 binary data 的类型写入到 Core Data,然后要用的时候再从 Core Data 中读出 NSData,再转回 NSDictionary,但是想想这样其实也挺麻烦的,想看看 Core Data 有没有更好的对这类需求的支持,这个方法就作为最后的手段来使用吧。于是在扫了一遍 Core Data 的 attributeType 之后就盯上了 transformable 这个类型。