我有这个型号:
在我的一个ViewController类中,我创建了一个带有3个while循环(一个嵌套循环)的方法,其中我插入了所有" cursos"," temas"和" subtemas"填充我的所有coreData模型。
所以,在那个方法中,我把这个循环访问我的coreData数据的一部分,看看我的嵌套循环是否有效,我是这样做的:
var i = cursos.count
var index = 0
do{
println(cursos[index].nombre)
println(cursos[index].temas[0].nombre)
println(cursos[index].temas[0].subTemas[0].nombre)
index++
}while(index < i)
&#34; cursos&#34;是我的NSManaged对象数组,包含我所有的&#34; cursos&#34;,所以在最后一个循环中我想我访问了&#34; subTema&#34;我的第一个&#34; curso&#34;的数据与第一个&#34; tema&#34;。
嗯,一切都按照我想要的方式进行,但当我尝试访问另一个类中的相同数据时(我的原始目标:可以随处访问我的数据),我访问数据的方法不会识别我的& #34; subTemas&#34; NSManagedObjects的堆栈链接到我的另外两个NSManagedObjects堆栈。例如:
也许我需要通过我的关系以另一种方式访问我的数据?如果是这样,我该怎么办?我真的需要你的帮助,谢谢!
更新:由Xcode生成的我的NSManagedObjects子类:
Curso.swift
import Foundation
import CoreData
class Curso: NSManagedObject {
@NSManaged var msjBienvenida: String
@NSManaged var nombre: String
@NSManaged var nombrePng: String
@NSManaged var temas: NSOrderedSet
}
Tema.swift
import Foundation
import CoreData
class Tema: NSManagedObject {
@NSManaged var nombre: String
@NSManaged var curso: Curso
@NSManaged var subTemas: NSOrderedSet
}
SubTema.swift
import Foundation
import CoreData
class SubTema: NSManagedObject {
@NSManaged var nombre: String
@NSManaged var tema: Tema
}
更新2(MartinR的相关代码):
在VC中,我将进行Web服务调用以填充我的coreData数据,在这里我不必投射我的数组,我可以访问我的数据,如cursos [index] .temas [0] .subtemas [1] .name,为什么? :
func webServiceCall2(index:Int){
var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
var exeWebServiceCall2 = defaults.objectForKey("exeWebServiceCall2") as? Bool
if (exeWebServiceCall2 == true){
var temasArray:[String] = ["Word","PowerPoint","Excel"]
var subTemasArray: [String] = ["Introduccion","Tema 1","Tema 2"," Tema 3"]
//Guardar temas y subtemas adquiridos de mi web service a mi grafo de objetos de coreData
var cantidadCursos = cursos.count
var indexCursos = 0
var cantidadTemas = temasArray.count
var indexTemas = 0
var cantidadSubTemas = subTemasArray.count
var indexSubTemas = 0
var error: NSError?
do{//para cada uno de mis cursos
var cursoActual = cursos[indexCursos]
do{//agregar un objeto entity Tema(que contiene un arreglo con los temas)
let temaEntity = NSEntityDescription.entityForName("Tema", inManagedObjectContext: managedContext)
let temaActual = Tema(entity: temaEntity!, insertIntoManagedObjectContext: managedContext)
temaActual.nombre = temasArray[indexTemas]
//Inserto todos los temas a mi curso Actual
var temas = cursoActual.temas.mutableCopy() as NSMutableOrderedSet
temas.addObject(temaActual)
cursoActual.temas = temas.copy() as NSOrderedSet
do{
let subTemaEntity = NSEntityDescription.entityForName("SubTema", inManagedObjectContext: managedContext)
let subTemaActual = Tema(entity: subTemaEntity!, insertIntoManagedObjectContext: managedContext)
subTemaActual.nombre = subTemasArray[indexSubTemas]
//Inserto todos los subTemas a mi tema Actual
var subTemas = temaActual.subTemas.mutableCopy() as NSMutableOrderedSet
subTemas.addObject(subTemaActual)
temaActual.subTemas = subTemas.copy() as NSOrderedSet
//Guardar, aunque no estoy seguro si puedo usar el mismo managedContext que ya tenia
if !managedContext.save(&error)
{
println("No pude guardar: \(error)")
}
indexSubTemas++
}while(indexSubTemas < cantidadSubTemas)
//reset index subtemas y aumento indexTemas para el siguiente ciclo de temas
indexSubTemas = 0
indexTemas++
}while(indexTemas < cantidadTemas)
//reset index temas y aumento indexCursos para el siguiente ciclo de cursos
indexTemas = 0
indexCursos++
}while(indexCursos < cantidadCursos)
defaults.setBool(false, forKey: "exeWebServiceCall2")
defaults.synchronize()
}
}
答案 0 :(得分:3)
temas
属性为NSOrderedSet
,下标[0]
返回
输入AnyObject
。所以(正如评论中已经说过的那样)你必须施展AnyObject
到实际类型
let curso = cursos[index]
println(curso.nombre)
let firstTema = curso.temas[0] as Tema
println(firstTema.nombre)
let firstSubTema = firstTema.subTemas[0] as SubTema
println(firstSubTema.nombre)
请注意,您可以使用for - in
简化循环:
for curso in cursos {
// ...
}
并递归枚举所有对象看起来像
for curso in cursos {
println(curso.nombre)
for tema in curso.temas.array as [Tema] {
println(tema.nombre)
for subtema in tema.subTemas.array as [SubTema] {
println(subtema.nombre)
}
}
}