2015-06-26 3 views
0

Моему приложению требуется начать отсчет дней с момента первого запуска. Если кто-то запускает мое приложение в первый раз, я хочу засчитывать день 1 после 12 ночей (с использованием часов устройства, конечно), а затем в день2 ... и выполнять действие после 21-го дня. Не важно, закрывает ли приложение приложение или выключает телефон. Когда приложение возвращается, оно должно автоматически определять, сколько дней прошло.Обратный отсчет дней iOS swift

Есть ли у кого-нибудь идеи, как это реализовать? , Я думаю о NStimer, но смущен.

+0

Если вы используете часы устройства, пользователь сможет его изменить или он может быть установлен неправильно. – scord

+0

На самом деле не имеет значения, изменился ли пользователь на время устройства или установил его неправильно. Я просто хочу иметь возможность считать прошедшие дни. –

+0

Я пытаюсь что-то на игровой площадке ... пока не существует реального решения .... Я думал об установке NStimer с интервалом, чтобы вызвать функцию, которая получает дату устройства каждые 12 часов (или каждый раз, когда приложение перезапускается), затем найдите, из предыдущей даты кеширования ... если да, то подсчет +1 –

ответ

3

Думаю, вы хотите использовать UILocalNotification. Это позволит вам предупреждать пользователя, независимо от того, активно ли ваше приложение или нет.

Обратитесь к документации here, выполните пробную реализацию и задайте новый вопрос о переполнении стека, если вы застряли и не можете найти ответ.

+0

Я пытаюсь что-то на игровой площадке ... нет реального решения. Я думал об установке NStimer с интервалом для вызова функции, которая получает дату устройства каждые 12 часов (или каждый раз, когда приложение перезагружается), то найдите, отличается ли он от предыдущей даты кеша ... если да, отметьте +1 –

0

Хорошо, после долгой игры и попробовал несколько вещей на детской площадке, я придумал решение, которое работает просто отлично. Поэтому, если кто-то пытается что-то сделать, вот мое решение.

func checkElapsedDay(){ 

    //make sure the date register only run 1 time. 
    if NSUserDefaults.standardUserDefaults().boolForKey("firstLaunch"){ 

     lauchDate = NSUserDefaults.standardUserDefaults().objectForKey("start")! as! NSDate 
     endDate = NSUserDefaults.standardUserDefaults().objectForKey("end")! as! NSDate 
    } 
    else{ 

     NSUserDefaults.standardUserDefaults().setBool(true, forKey: "firstLaunch") 
     NSUserDefaults.standardUserDefaults().synchronize() 

     endDate = lauchDate.dateByAddingTimeInterval(1814400) // 1814400 = 21 days 
     NSUserDefaults.standardUserDefaults().setObject(lauchDate, forKey: "start") 
     NSUserDefaults.standardUserDefaults().setObject(endDate, forKey: "end") 
    } 

    var today = NSDate() 
    let compareResult = today.compare(endDate) 
    let cal = NSCalendar.currentCalendar() 
    let unit:NSCalendarUnit = .CalendarUnitDay 
    let components = cal.components(unit, fromDate: today, toDate: endDate, options: nil) 
    let biss = cal.compareDate(today, toDate: endDate, toUnitGranularity: nil) 
    var bbb = components.day 
    daysleft.image = UIImage(named: "\(bbb).png") //change the remaining day stamp 

} 
Смежные вопросы