2015-03-13 67 views
6

我是iOS开发新手,想知道应该指定哪种数据类型来存储多个字符串(数组)。该应用程序是与食物,我需要存储多个成分作为一个属性。iOS Swift - 如何使用核心数据存储数组?

我正在考虑将配料制作为实体,但我只是想让初学者变得简单。 我已阅读有关可变形类型,但人们似乎不建议使用它来存储数组。

回答

11

警告:有预见的答案。

你不知道。

将数据存储在数组中并不会让您更轻松。相反,它会使事情变得更加困难,只需一个小时。想象一下,您想要显示包含选定成分的所有食谱。对于你的数组破解而言,这并不容易,使用合适的模型只需要几行代码。

我会建议使用与“加入实体”的良好的旧关系。

basic Recipe data model

是的,这是比黑客的东西一起勉强工作更加复杂。但这是正确的方法。

+1

感谢您的建议。你是对的。我应该正确地做。 – 2015-03-13 10:05:46

+0

如果我需要在联合实体中明确创建配方ID和成分ID的属性,您能告诉我吗?或者如果建立关系,xcode会自动处理它? – 2015-03-13 10:24:03

+0

我明白你的意思是关于排序和显示搜索结果。但是,他现在是不是需要一组自定义ingrediet对象?我的应用程序需要一个字符串数组(并不会从上面的模型中受益),而且我仍然不知道如何存储数组。任何帮助? – Japes 2015-09-02 05:56:49

2

你在想什么,正是你应该做的。核心数据是以数组结构的形式存储值。您应该创建实体成分,并将您的食品实体(或任何您想称之为)与成分实体关系连接起来。

+0

谢谢:)我会采取适当的方式。 – 2015-03-13 10:04:38

+0

但在哪里存储这些数据? – Martian2049 2017-08-28 13:01:41

1

有一种方法。您可以手动执行每个元素,例如 你有你的阵列:

let employee: NSMutableArray = [] 

employee.addObject(["name":"Bill","LastName":"Hanks"]) 
employee.addObject(["name":"Rolex","LastName":"Swarzer"]) 
employee.addObject(["name":"Clive","LastName":"Martin"]) 
employee.addObject(["name":"Jimi","LastName":"Hendrix"]) 

假设你已经创建了实体“雇员”你coreData和属性“名”和“姓氏”你以下信息才能增加它...

let appDel = UIApplication.sharedApplication().delegate as! AppDelegate 
let context = appDel.managedObjectContext 

for item in employee { 
    do { 
     let newUser = NSEntityDescription.insertNewObjectForEntityForName("Employee", inManagedObjectContext: context) 
     newUser.setValue(item["name"], forKey: "name") 
     newUser.setValue(item["LastName"], forKey: "lastname") 
     try context.save() 
    } catch { 
     //do nothing 
    } 

然后,您可以使用您的抓取请求或NSFetched结果控制器获取所有元素