为什么我的Swift for-in-loop没有执行/迭代?

时间:2015-02-08 07:35:46

标签: ios swift

我试图删除与CoreData模型关联的NSManagedObjects数组。我正在创建我的属性所属的类的新实例,并尝试删除其中的每个项目。关于我做错了什么的线索?

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {

    if editingStyle == .Delete {

        // THIS FOR IN LOOP WILL NOT EXECUTE...
        for x in DrilledDownCategoryViewController().categoryItemsItems {
            println("^^^")
            managedObjectContext?.deleteObject(x as NSManagedObject)
        }

        // EVERYTHING ELSE WILL THOUGH...
        println("asdfjkl;")

        let logItemToDelete = categoryItems[indexPath.row]

        managedObjectContext?.deleteObject(logItemToDelete)

        self.fetchCategory()

        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)

        save()

    }

} 

2 个答案:

答案 0 :(得分:1)

DrilledDownCategoryViewController是一个班级。 DrilledDownCategoryViewController()是它的构造函数。 使用DrilledDownCategoryViewController(),您可以创建视图控制器的新实例,而不是访问“正在运行”的实例。 自然地,一个新的Object相关数组(或者说是什么)将是nil或者它在构造函数中设置的内容。

如果您习惯于Objective-C,那就是您所做的:

[[[DrilledDownCategoryViewController alloc] init| categoryItemsItems]

Obj-C forin循环也不会迭代一次。

答案 1 :(得分:0)

for-in-loop不会执行空数组。

只需执行此操作即可从另一个类中遇到空的fetch结果数组:如果您正在尝试访问CoreData项的获取结果数组;不依赖于从另一个类访问数组。只需获取特定的谓词过滤项并将它们注入新数组。您可以从那里更改或删除它们......