Swift应用程序在真实设备上崩溃,但在模拟器上工作

这个函数从昨天获取date; 它是在我的模拟器上工作,但它与我的真实设备崩溃。

我正在使用Xcode6 Beta 6。

var tuple :(value Int, unit:NSCalendarUnit) = (1, NSCalendarUnit.CalendarUnitDay) var date = NSDate() var yesterday = NSCalendar.currentCalender().dateByAddingUnit(tuple.unit, value: (-tuple.value), toDate: date, options: NSCalendarOptions.SearchBackwards) 

这是我在真实设备上的错误:

 -[_NSCopyOnWriteCalendarWrapper dateByAddingUnit:value:toDate:options:]: unrecognized selector sent to instance 0x176cca10 

我最近有一个类似的错误。

我怀疑你正试图在pre 8.0设备上运行代码。 如果是这种情况,则dateByAddingUnit在您的设备上不可用(请参阅标题)

 @availability(iOS, introduced=8.0) 

你可以通过使用'dateByAddingComponents'来实现你想要做的事情 – 这有点麻烦,但是应该给你相同的结果。 尝试下面的操场

 import UIKit import Foundation var tuple:( Int, NSCalendarUnit) = (1, NSCalendarUnit.CalendarUnitDay) var date = NSDate() /* 8.0+ */ var yesterday = NSCalendar.currentCalendar().dateByAddingUnit(tuple.1, value: (-tuple.0), toDate: date, options: NSCalendarOptions.SearchBackwards) /* 7.1 + */ let component = NSDateComponents() if tuple.1 == NSCalendarUnit.CalendarUnitDay { component.day = -tuple.0 } var alsoYesterday = NSCalendar.currentCalendar().dateByAddingComponents(component, toDate: date, options: NSCalendarOptions.SearchBackwards) 

希望这可以帮助! 🙂

当我运行你的代码时,它有语法错误开始。 我只是采取了下面的代码,并运行在一个设备在操场上,在线模拟器和一个Xcode项目,它适用于所有三个。

以下为我工作。

http://swiftstub.com/992344166/点击运行查看结果。

 var date = NSDate() var yesterday = NSCalendar.currentCalendar().dateByAddingUnit(NSCalendarUnit.CalendarUnitDay, value: -1, toDate: date, options: NSCalendarOptions.SearchBackwards) println(yesterday) 

请尝试下面的代码

 let today = NSDate() let yesterday = today.dateByAddingTimeInterval(-24 * 60 * 60)