【发布时间】:2014-07-12 19:09:20
【问题描述】:
我是一名 iOS 新手开发人员。我正在尝试将 executeFetchRequest 的结果导入到我创建的结构中,以便稍后查看到表中。我在 func getTasks() 中得到“数组索引超出范围”,我很确定我应该附加它,但不确定如何附加。
我相信一般来说有更好的设置方法。现在我只是想让事情顺利进行。但其他建议将不胜感激。
import UIKit
import CoreData
var taskMgr: TaskManager = TaskManager()
struct task {
var name = "Un-Named"
var desc = "Un-Described"
}
class TaskManager: NSObject {
var tasks = task[]()
init() {
super.init()
self.getTasks()
}
func addTask(name: String, desc: String) {
tasks.append(task(name: name, desc: desc))
let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let context:NSManagedObjectContext = appDel.managedObjectContext
let ent = NSEntityDescription.entityForName("Tasks", inManagedObjectContext: context)
var newTask = Tasks(entity: ent, insertIntoManagedObjectContext: context)
newTask.name = name
newTask.desc = desc
println("Object saved")
context.save(nil)
}
func getTasks() {
let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
let context:NSManagedObjectContext = appDel.managedObjectContext
var request = NSFetchRequest(entityName: "Tasks")
request.returnsObjectsAsFaults = false;
var results:NSArray = context.executeFetchRequest(request, error: nil)
if (results.count > 0) {
self.tasks = task[]()
var i = 0
for element in results {
tasks[i].name = element.name // fatal error: Array index out of range
tasks[i].desc = element.desc
i++
}
}
}
}
class Tasks: NSManagedObject {
@NSManaged var name: String
@NSManaged var desc: String
}
【问题讨论】:
-
在 Swift 中(如在 Objective-C 中)类型名称应该是标题大小写 - 如果您将结构从
task重命名为Task,您的代码将更容易理解。