0

我一直在为我的一个 iOS 应用程序使用 CoreData,并希望构建一个辅助函数来将StringCoreData 实体的表示转换为该实体的NSManagedObject实例。我刚刚完成了我专业的第一门 Swift 课程,根据我的理解,我认为逻辑/实现相当简单。我相信我的实现是错误的,因为 Swift 是我最新的编程语言。我试图避免对解决方案进行硬编码,因为我的直觉告诉我有更好、更通用的方法来实现我的目标。

示例(天真的伪代码):

func getEntity(from string: String) -> NSManagedObject {
    return string as! NSManagedObject
}

期望执行:

let stringRep = "Entity"
entity(from: stringRep)

Entity

语境:

我正在使用的两个 CoreData 实体是CategoryService

public class Category: NSManagedObject { }
public class Service: NSManagedObject { }

Category包含与许多Service实体的关系以及我在AppService使用该关系访问 CoreData 时的其他辅助函数。

CategoryTableViewController具有三个静态单元格,每个单元格都包含String的实体表示Category

我将String实体的选定表示(例如Serviceduring prepare(for segue: UIStoryboardSegue, sender: Any?))传递给下一个UIViewController带有UITableView.

使用新的辅助函数,我将能够模糊地从 CoreData 中获取具有String表示形式的数据,并将数据显示在UITableView.

我的最终目标是AppService用下面的函数去掉不必要的函数。

func get(_ entities: String, for category: Category) -> NSFetchedResultsController<T> {
    let someEntity = getEntity(from: entities)
    let fetchRequest: NSFetchRequest<someEntity> = someEntity.fetchRequest()
    fetchRequest.predicate = NSPredicate(format: "category == %@", category)
    fetchRequest.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]

    return createFetchedResultsController(for: fetchRequest)
}

例子:

get("Service", for: category)
4

2 回答 2

1

您可以根据实体名称创建某个实体的新对象。与往常一样,您将需要托管对象上下文。

首先你必须得到NSEntityDescription

let entity = NSEntityDescription.entity(forEntityName: "Widget", in: context)

然后你可以创建对象:

let newWidget = NSManagedObject(entity: entity, in: context)

但是,使用子类会好得多。它自动包含实体信息。

let newWidget = Widget(context: context)  // much easier
于 2017-04-15T18:41:06.010 回答
0

那种方式是不可能的...

1,假设有一个实体名称为“Person”,因为您有一个属性为“名称”

2,通过获取查询有一个类似xx12145ac的NSManagedObject或者创建一个新的NSManagedobject的人

3,一旦你有了 Person 类型的对象,你就可以设置

myPersonObj.name = "SomeOne" 作为!细绳

希望能帮到你!!!

如果您遇到任何问题,请告诉我.. :)

于 2017-04-15T19:10:09.603 回答