我有這個奇怪的錯誤。我有一個全球性的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