Swift核心数据 - NSMutableOrderedSet中的removeObject()意外行为

时间:2015-08-04 21:04:42

标签: swift core-data

我一直在咀嚼这一个星期,除非我在Swift中错过了一个非常基本的概念,这似乎是一个非常严重的错误。

我有一个具有一对多关系的CoreData模型,如下所示:

城市 - >有很多街

此外,每个实体都具有string类型的name属性。

相应的类是:

class City: NSManagedObject {

    @NSManaged var name: String
    @NSManaged var streets: NSOrderedSet
}

class Street: NSManagedObject {

    @NSManaged var name: String
}

这里有非常奇怪的东西:

var city:City = getCities().first!
var streets = city.streets.array as! [Street]
var streetToDelete:Street? = nil

//This works
streetToDelete = streets.first

//This is not working !!!
for street in streets {
    if(street.name == "champs elysees"){
        streetToDelete = street
    }
}
deleteStreet(city, street:streetToDelete!) 

还有deleteStreet函数:

func deleteStreet(var city:City, var street:Street){
    var streets = city.streets
    var streetsSet:NSMutableOrderedSet = streets.mutableCopy() as! NSMutableOrderedSet
    streetsSet.removeObject(street)
    city.streets = streetsSet.copy() as! NSOrderedSet
    saveContext()
} 

因此,如果我使用streets.first,删除就像接受一样 但是如果我使用foreach循环而没有任何反应 - 没有抛出错误,也没有删除街道。 (当然我需要foreach循环来找到特定的街道并将其删除)。

为什么.first和foreach有什么不同?
他们想在两种情况下都给我一个指向街道的指针。

(getCities()是一本简单的,直接来自书籍,获取操作)

更新: 经过进一步调查后,似乎某些迭代本身对街道数组的影响会导致问题。

0 个答案:

没有答案