Swift应用程序在真实设备上崩溃但在模拟器上运行

时间:2014-09-08 10:30:00

标签: 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.value), toDate: date, options: NSCalendarOptions.SearchBackwards)

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

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

3 个答案:

答案 0 :(得分:7)

我最近遇到了类似的错误。

我怀疑你是否试图在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)

希望这有帮助! :)

答案 1 :(得分:1)

当我运行您的代码时,它首先会出现语法错误。我刚刚接受了以下代码,并在游乐场,在线模拟器和xcode项目中的设备上运行它,它适用于所有三个。

以下适用于我。

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

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

答案 2 :(得分:-1)

请尝试以下代码

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