Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么在加载视图时不能替换核心数据中的对象?_Ios_Swift_Core Data_Fetch - Fatal编程技术网

Ios 为什么在加载视图时不能替换核心数据中的对象?

Ios 为什么在加载视图时不能替换核心数据中的对象?,ios,swift,core-data,fetch,Ios,Swift,Core Data,Fetch,几天来,我一直在努力使这段代码正常工作。我正在尝试使用核心数据构建一个简单的待办事项列表应用程序,整合完成某项任务之前的剩余天数。我已经把代码放在我的viewwillappease函数中了。通常,每次视图出现时,daysLeft都应该更新,但由于某些原因,即使几天后,daysLeft在表视图中的显示始终保持不变。我一直在试图找出可能出现的问题,我是否将代码放在了正确的函数中,还是应该放在viewDidLoad或类似的东西中。这可能是模拟器的一个问题,并且它可以在真正的iPhone上工作吗?也许我

几天来,我一直在努力使这段代码正常工作。我正在尝试使用核心数据构建一个简单的待办事项列表应用程序,整合完成某项任务之前的剩余天数。我已经把代码放在我的viewwillappease函数中了。通常,每次视图出现时,daysLeft都应该更新,但由于某些原因,即使几天后,daysLeft在表视图中的显示始终保持不变。我一直在试图找出可能出现的问题,我是否将代码放在了正确的函数中,还是应该放在viewDidLoad或类似的东西中。这可能是模拟器的一个问题,并且它可以在真正的iPhone上工作吗?也许我没有正确地替换对象,也许我的for循环工作不好,或者可能是其他原因。作为一个整体,我对编程是完全陌生的,所以这超出了我的理解。任何帮助都将不胜感激!干杯:)

var myList:Array=[]
覆盖功能视图将出现(动画:Bool){
让appDeleg:AppDelegate=UIApplication.sharedApplication().delegate作为AppDelegate
让上下文:NSManagedObjectContext=appDeleg.managedObjectContext!
let freq=NSFetchRequest(entityName:“ToDoList”)
让sortDescriptor=NSSortDescriptor(键:“itemDaysLeft”,升序:false)
freq.sortDescriptors=[sortDescriptor]
myList=contexts.executeFetchRequest(频率,错误:nil)!
对于var index=0;indexUITableView单元格{
let CellID:NSString=“myCell”
变量单元格:CustomCell=tableView.dequeueReusableCellWithIdentifier(CellID)作为CustomCell
如果让ip=indepath作为nsindepath{
var数据:NSManagedObject=myList[ip.row]作为NSManagedObject
cell.textLabel?.text=data.valueForKeyPath(“itemName”)作为?字符串
cell.detailTextLabel?.text=data.valueForKeyPath(“daysLeftStr”)作为?字符串
}
返回单元
}

如何重新加载表格?还有另一个取回请求吗?你的cellForRowAtIndexPath是什么样子的?问题可能是您没有将更改保存到列表中。为此,需要在调用tableView.reloadData()之前调用contexts.save(nil)。这将保持更改。谢谢Mike,我为我的tableView添加了代码。保存上下文对我来说很有意义。我没有想到这一点,也不知道我必须再次保存它。我已将您的建议添加到我的代码中。希望它能起作用。您计算剩余天数的代码看起来不正确-您永远不应该依赖具有任何意义的对象的
hashValue
-出于相等比较的目的,它是一个不透明的值。你不需要对NSCalendar做任何事情。只需在
userChosenDate
上调用
timeIntervalSinceNow
并除以86400即可,因为您是从正在更新的同一数组加载表的,所以context.save可能无关紧要@Paulw11很好地说明了你的计算是错误的。我建议大家按照他的建议去做。谢谢大家的帮助。我试过保罗的建议。现在还不行。由于某些原因,当我使用TimeIntervalsIncenseNow在表视图中显示剩余天数时,它一直返回0。我再胡闹一会儿也许行得通。不过到目前为止,散列值对我来说非常有效。
var myList: Array<AnyObject> = []

override func viewWillAppear(animated: Bool) {

    let appDeleg: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let contexts: NSManagedObjectContext = appDeleg.managedObjectContext!
    let freq = NSFetchRequest(entityName: "ToDoList")

    let sortDescriptor = NSSortDescriptor(key: "itemDaysLeft", ascending: false)
    freq.sortDescriptors = [sortDescriptor]


    myList = contexts.executeFetchRequest(freq, error: nil)!


    for var index = 0; index < myList.count; index++ {

        var data: NSManagedObject = myList[index] as NSManagedObject

        var chosenDate: NSDate = data.valueForKey("userChosenDate") as NSDate
        var todayDate: NSDate = NSDate()

        let calendar = NSCalendar.currentCalendar()
        let components = calendar.components(.DayCalendarUnit, fromDate: todayDate, toDate: chosenDate, options: nil)

        let secondsInADay = ((60 * 60) * 24)
        let newDaysLeft: Int = ((components.hashValue / secondsInADay) + 1)

        var newDaysLeftStr: String = "\(newDaysLeft)"

        myList[index].setValue(NSNumber(short: newDaysLeft), forKey: "itemDaysLeft")
        myList[index].setValue(NSString(UTF8String: newDaysLeftStr), forKey: "daysLeftStr")

// added suggested line by Mike
contexts.save(nil)

    }

    tableView.reloadData()
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {


    let CellID: NSString = "myCell"

    var cell: CustomCell = tableView.dequeueReusableCellWithIdentifier(CellID) as CustomCell

    if let ip = indexPath as NSIndexPath! {

        var data: NSManagedObject = myList[ip.row] as NSManagedObject
        cell.textLabel?.text = data.valueForKeyPath("itemName") as? String

        cell.detailTextLabel?.text = data.valueForKeyPath("daysLeftStr") as? String

    }

    return cell
}