【问题标题】:Array is getting updated as values are change随着值的变化,数组正在更新
【发布时间】:2015-11-20 01:55:29
【问题描述】:

我想弄清楚为什么我的数组会动态更新?

我有以下课程

class LocationData {
   var address: String = ""
   var city: String = ""
   var deviceName: String = ""
   var deviceId: String = ""
   var state: String = ""
}

那么我有以下功能

func fetchLocationItems(sortByKey1: String, sortByKey2: String, deviceID: String, isAsecending: Bool) -> [LocationData]{

    var locationObjectArray = [LocationData]()

    var locationData = LocationData()
    let context: NSManagedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
    do {
        let request = NSFetchRequest(entityName: "Location")
        let sortDescriptor1 = NSSortDescriptor(key: sortByKey1, ascending: isAsecending)
        let sortDescriptor2 = NSSortDescriptor(key: sortByKey2, ascending: isAsecending)
        request.sortDescriptors = [sortDescriptor1, sortDescriptor2]
        let results = try locationContext.executeFetchRequest(request)
        var count = 0
        if results.count > 0 {
            for item in results as! [NSManagedObject] {
                if item.valueForKey("deviceID")  as! String == deviceID {
                   locationData.deviceId  = item.valueForKey("deviceID")  as! String  
                   locationData.address = item.valueForKey("address") as! String
                   locationData.city = item.valueForKey("city") as! String
                   locationData.state = item.valueForKey("state") as! String
                   locationData.deviceName = item.valueForKey("deviceName") as! String
                   locationObjectArray.insert(locationData, atIndex: count)
                   count++
                }
             }
            //try context.save()
        }

    } catch {
        print("There was error getting data")
    }
    return locationObjectArray

}

所以我在coredata中有4条记录。第一次通过“for item 循环”,locationDate 被插入到 locationObjectArry 中

第二次通过循环,locationObjectArray 中索引 0 处的值将更新为 example 的新值

locationData.deviceId  = item.valueForKey("deviceID")  as! String  
locationData.address = item.valueForKey("address") as! String

等等。

所以在循环结束时,locationObjectArray[0..4]的值都和最后一条记录一样。

知道可能是什么问题吗?

【问题讨论】:

    标签: ios arrays swift core-data


    【解决方案1】:

    因为您的对象在每个循环中都不是 init new。所以对象还是一样的

    尝试:

    for item in results as! [NSManagedObject] {
        if item.valueForKey("deviceID")  as! String == deviceID {
            // init new LocationData
            var locationData = LocationData()
            locationData.deviceId  = item.valueForKey("deviceID")  as! String
            locationData.address = item.valueForKey("address") as! String
            locationData.city = item.valueForKey("city") as! String
            locationData.state = item.valueForKey("state") as! String
            locationData.deviceName = item.valueForKey("deviceName") as! String
            locationObjectArray.insert(locationData, atIndex: count)
            count++
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      • 2016-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多