Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.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 CollectionView重新加载数据Swift问题_Ios_Core Data_Calendar - Fatal编程技术网

Ios CollectionView重新加载数据Swift问题

Ios CollectionView重新加载数据Swift问题,ios,core-data,calendar,Ios,Core Data,Calendar,我正在一个应用程序中创建一个日历,你可以在其中选择你在健身房锻炼的肌肉。 首先,您完成一个表单,数据存储在数据库(CoreData)中。然后我执行一个查询来检索该数据,以便在我创建的日历中显示它 问题是日历是一个集合视图,所以我在找到锻炼的日子里显示了一个彩色圆圈,但当我重新加载数据时,会发生一些奇怪的事情…日历在不正确的日子里显示圆圈,但是如果我调试代码,我意识到,当代码只输入两次来创建这个圆时,我看到了例如3个圆!(我不知道我是否清楚……很难解释) 这是我代码的一部分: ViewDidLoa

我正在一个应用程序中创建一个日历,你可以在其中选择你在健身房锻炼的肌肉。 首先,您完成一个表单,数据存储在数据库(CoreData)中。然后我执行一个查询来检索该数据,以便在我创建的日历中显示它

问题是日历是一个集合视图,所以我在找到锻炼的日子里显示了一个彩色圆圈,但当我重新加载数据时,会发生一些奇怪的事情…日历在不正确的日子里显示圆圈,但是如果我调试代码,我意识到,当代码只输入两次来创建这个圆时,我看到了例如3个圆!(我不知道我是否清楚……很难解释)

这是我代码的一部分:

ViewDidLoad方法:

override func viewDidLoad() {
    super.viewDidLoad()
    let date = NSDate()
    let calendar = NSCalendar.currentCalendar()
    let components = calendar.components( .CalendarUnitMonth | .CalendarUnitDay | .CalendarUnitWeekday, fromDate: date)
    let month = components.month

    monthLabel.text = getMonthAtIndex(month-1)
    monthIndex = month-1    // components start at index 1
    fetchMonthData()
    loadCalendayDays()      // for current month
}
创建日历的主要方法:

    func loadCalendayDays() {

        // Setup the calendar object
        let calendar = NSCalendar.currentCalendar()
        let date = NSDate()

        // Create an NSDate for the first and last day of the month
        var components2 = calendar.components(NSCalendarUnit.CalendarUnitYear |
            NSCalendarUnit.CalendarUnitMonth |
            NSCalendarUnit.CalendarUnitWeekday |
            NSCalendarUnit.CalendarUnitDay,
            fromDate: date)

        // Get First and Last date of the month
        components2.month = monthIndex + 1
        components2.day = 1
        let firstDateOfMonth: NSDate = calendar.dateFromComponents(components2)!
        components2.month  += 1
        let lastDateOfMonth: NSDate = calendar.dateFromComponents(components2)!
//      println("first of month: \(firstDateOfMonth)")
//      println("last of month: \(lastDateOfMonth)")

        // get number of days in month
        let unit:NSCalendarUnit = NSCalendarUnit.CalendarUnitDay
        let components3 = calendar.components(unit, fromDate: firstDateOfMonth, toDate: lastDateOfMonth, options: nil)
//      println("number of days in month \(components3.day)")

        // get the day for the first of the month
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd"
        var firstDayString = dateFormatter.stringFromDate(firstDateOfMonth)

        var weekDay = 0
        if let firstDate = dateFormatter.dateFromString(firstDayString) {
            let myComponents = calendar.components(NSCalendarUnit.CalendarUnitWeekday, fromDate: firstDate)
            weekDay = myComponents.weekday
//          println("first was on a: \(weekDay)")
        }
        else {
//          println("first day is nil")
        }

        var firstWeekDay = weekDay
        var numberOfDaysInMonth = components3.day
        var totalDays = numberOfDaysInMonth + firstWeekDay

        daysArray.removeAll(keepCapacity: true)
        var index = 1
        for var i = 1; i < totalDays; i++ {
            if i < weekDay {
                daysArray.append("0")
            }
            else {
                daysArray.append("\(index++)")
            }
        }

        self.calendarCollView.reloadData()
    }
谢谢你的帮助

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CalendarCell", forIndexPath: indexPath) as! CalendarCell
    var day = daysArray[indexPath.row] as NSString
    if day == "0"
    {
        cell.dayLabel.hidden = true
    }
    else {
        if day == getDay(){
            cell.dayLabel.hidden = false
            cell.dayLabel.text = day as String
            positionToday = indexPath.row
        }
        else{ //Para los demas dias

            cell.dayLabel.hidden = false
            cell.dayLabel.text = day as String
        }
        if day.length == 1 {
            day = "0" + (day as String)
        }
        var aDiasEntrenadosLocal:[String] = recuperoDiasEntrenados()
        while aDiasEntrenadosLocal.count > 0{
            var DiaEntrenado = aDiasEntrenadosLocal[0] as NSString
            if DiaEntrenado as NSString == day{
                if positionToday != nil{
                    cell.dayImage.image = bluePoint
                }
                else{
                    cell.dayImage.image = redPoint
                }
                aDiasEntrenadosLocal.removeAll(keepCapacity: true)
            }
            else{
                aDiasEntrenadosLocal.removeAtIndex(0)
            }
        }//Cierre while
    }
    if indexPath.row == positionToday && formatoMesCalendario() == formatoMesHoy(){ //Otro color al dia de HOY
        //cell.layer.borderColor = UIColor.blackColor().CGColor
        //cell.layer.borderWidth = 3.0
        cell.layer.borderWidth = 1.0
        cell.layer.borderColor = UIColor.lightGrayColor().CGColor
        cell.dayLabel.textColor = UIColor.redColor()
        cell.dayLabel.font = UIFont.boldSystemFontOfSize(17.0)
        cell.dayLabel.text = "-> " + (day as String)
    }
    else
    {//Para los demas dias
        cell.layer.borderWidth = 1.0
        cell.layer.borderColor = UIColor.lightGrayColor().CGColor
    }
    countt++
    return cell
}