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

Ios Swift应用程序在真实设备上崩溃,但在模拟器上工作,ios,swift,xcode6,Ios,Swift,Xcode6,此函数获取从昨天开始的日期;它在我的模拟器上工作,但在我的真实设备上崩溃了 我正在使用Xcode6 Beta 6 var tuple :(value Int, unit:NSCalendarUnit) = (1, NSCalendarUnit.CalendarUnitDay) var date = NSDate() var yesterday = NSCalendar.currentCalender().dateByAddingUnit(tuple.unit, value: (-tuple.va

此函数获取从昨天开始的日期;它在我的模拟器上工作,但在我的真实设备上崩溃了

我正在使用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

当我运行您的代码时,首先会出现语法错误。我只是把下面的代码在游乐场的一个设备上运行,在一个在线模拟器和一个xcode项目中运行,这三个项目都可以使用

以下内容适合我

单击运行以查看结果

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

我最近也犯了类似的错误

我怀疑你试图在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)
希望这有帮助!:

请尝试下面的代码

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

您的设备有哪个操作系统版本?我建议您更新到最新的Xcode beta 7,并确保您的设备也在最新的iOS8 beta上。在每一个新的测试版中都有很多变化,所以没有最新版本可能会导致问题。当我运行这段代码时,首先会出现错误。请发布实际的工作代码。如果你把currentCalendar拼错了,这根本不可能编译。这不考虑夏令时或闰秒,可能会导致意外问题。