2017-02-17 64 views
1

我有這個奇怪的錯誤。我有一個全球性的Bool稱爲CalendarAccessSwift布爾本身的變化

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

但是,當我在視圖控制器中執行以下操作時,CalendarAccessfalse

@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,但是否則不是。

+1

什麼*確切*讓你認爲'_CalendarAccess'成爲現實?你能發表一個(最小的)*自包含的例子來證明問題嗎? setter方法中的斷點是否被擊中?如果是 - 什麼是調用堆棧?也許它只是調試器顯示垃圾?向setter和getter添加'print(_CalendarAccess)'。 –

+0

所以我在'_CalendarAccess = true'行下面加了一個'print(_CalendarAccess)'。在調用saveEvent函數之前一次輸出'true'。但是,我仍然收到錯誤警報。 – edvinHolm

+0

您在func saveEvent中的代碼詢問CalenderAccess。 getter返回您設置爲false的_CalendarAccess的值。除非你真的將_CalendarAccess設置爲true,否則它總是返回false。 – Magnas

回答

2

項目包含相同名稱的框架,導致編譯器在多個地方查找相同的值。刪除框架,解決問題:)