NSClassFromString不起作用

时间:2017-07-06 12:07:03

标签: ios swift core-data

以下是我遇到的代码问题:

let entityTypeDico = ["entityTypeOne": arrayOne, "entityTypeOneTwo": arrayTwo,
                      "entityTypeThree": arrayThree, "entityTypeFour": arrayFour];

for (entityName, arrayItem) in entityTypeDico {
    for x in arrayItem {
      /*do something with x and arrayItem
      I need to use the class of entityName */
      //To get it I tried to use some code like:
      NSClassFromString(entityName) // But it does not work.
    }
}

entityTypeOne,..... entityTypeFour是CoreData实体的名称, arrayOne,..... arrayFour是某种数组(对于这个问题不是那么重要)。

我需要使用什么确切的代码来获取循环中每个实体的类型?

2 个答案:

答案 0 :(得分:2)

你的第二个for循环没有意义。你能试试吗?

for (entityName, arrayItem) in entityTypeDico {
    NSClassFromString("YourProjectName.\(entityName)")
}

修改1

目前我正在开发一个使用NSClassFromString的项目。这就是我在代码中使用它的方式。

在我的主要课程中,我使用:

let carClass = NSClassFromString("MyProjectName.\(self.selectedBrand)\(self.selectedModel)") as! NSObject.Type
_ = carClass.init()

用户选择selectedBrand和selectedModel。

在汽车类中,我有一个初始化函数

override init() {
    super.init()

    // My codes here like initializing webview

}

希望有所帮助

答案 1 :(得分:0)

这是我经过多次实验后找到的结果。 它的工作和做我想要的。我希望它对其他人也有用。

let entityTypeDico = ["entityTypeOne": arrayOne, "entityTypeOneTwo": arrayTwo,
                      "entityTypeThree": arrayThree, "entityTypeFour": arrayFour];

// "entityTypeXYZ" is a class name (subclass of NSManagedObject)
// arrayXYZ is some array (not so important for the question)

for (entityName, arrayItem) in entityTypeDico {
    for x in arrayItem {
      /*do something with x and arrayItem
      I need to use the class of entityName */
      //To get it I tried to use some code like:
      NSClassFromString(entityName) // But it did not work.
      // Here is what finally worked for me:
      ((NSClassFromString("\(entityName)")) as! NSManagedObject.Type)
    }
}