我有这个奇怪的错误。我有一个全球性的Bool
称为CalendarAccess
:Swift布尔本身的变化
var EventStore: EKEventStore!
var Calendar: NSCalendar!
var CalendarAccessRequestComplete = false
var _CalendarAccess = false
var CalendarAccess: Bool {
set(value)
{
_CalendarAccess = value;
}
get {
return _CalendarAccess;
}
}
正如你所看到的,我做了一个setter和getter方法,所以我可以把一个断点,看看它正在建立。我做到了这一点,每次我碰到断点时,值都是true
。我确定我从来没有直接设置_CalendarAccess
,因为直到现在,这个变量只被称为CalendarAccess
。
但是,当我在视图控制器中执行以下操作时,CalendarAccess
是false
!
@IBAction func saveEvent(_ sender: Any) {
if(CalendarAccess)
{
let event = EKEvent(eventStore: EventStore)
event.title = "My Event"
event.startDate = Date();
event.endDate = Calendar.date(byAdding: .hour, value: 1, to: Date(), options: .matchFirst)!
event.notes = "A note"
event.calendar = EventStore.defaultCalendarForNewEvents
do
{
try EventStore.save(event, span: .thisEvent)
} catch
{
print("Unable to save event")
}
}
else
{
ErrorAlert(title: "No calendar access", text: "Please give the app access to your calendar. You can do that in your iOS device's settings.")
}
}
我不知道如何这甚至是可能的 - 该变量是一个全球性的,不具有任何与任何视图或控制器。
如果该信息完全有用,则模态地呈现控制器的最后一个代码块。
编辑:CalendarAccess
设置只在一个地方(AppDelegate中):
func updateCalendarAccess()
{
Calendar = NSCalendar.current as NSCalendar!
CalendarAccessRequestComplete = false
EventStore = EKEventStore()
EventStore.requestAccess(to: .event, completion: {
(access: Bool, e: Error?) in
CalendarAccessRequestComplete = true
CalendarAccess = access;
return
})
while(!CalendarAccessRequestComplete) { }
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
// Override point for customization after application launch.
updateCalendarAccess()
return true
}
编辑:
2017-02-17 13:58:00.980237 Calendar[16695:5163026] [MC] System group container for systemgroup.com.apple.configurationprofiles path is /private/var/containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles
2017-02-17 13:58:00.989165 Calendar[16695:5163026] [MC] Reading from public effective user settings.
:当我点击调用
@IBAction func saveEvent
按钮我得到这些消息
编辑:当我解雇模态提出的视图控制器(与一个函数)并记录CalendarAccess
的值,这是真的。并且setter断点未被命中。
编辑:看来,当我提出VC时,_CalendarAccess
的值可以回到初始值。如果我将var _CalendarAccess = false
更改为var _CalendarAccess = true
,那么VC呈现时就是这样。此外,当呈现VC时,Calendar
变量是nil
,但是否则不是。
什么*确切*让你认为'_CalendarAccess'成为现实?你能发表一个(最小的)*自包含的例子来证明问题吗? setter方法中的断点是否被击中?如果是 - 什么是调用堆栈?也许它只是调试器显示垃圾?向setter和getter添加'print(_CalendarAccess)'。 –
所以我在'_CalendarAccess = true'行下面加了一个'print(_CalendarAccess)'。在调用saveEvent函数之前一次输出'true'。但是,我仍然收到错误警报。 – edvinHolm
您在func saveEvent中的代码询问CalenderAccess。 getter返回您设置为false的_CalendarAccess的值。除非你真的将_CalendarAccess设置为true,否则它总是返回false。 – Magnas