Swift bool 自己改变

Swift bool changes by itself

我有这个奇怪的错误。我有一个名为 CalendarAccess:

的全局 Bool
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
}

编辑: 当我点击调用 @IBAction func saveEvent:

的按钮时,我收到了这些消息
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.

编辑: 当我关闭模态呈现的视图控制器(具有 saveEvent 功能的视图控制器)并记录 CalendarAccess 的值时,这是真的再次。 setter 断点未命中。

编辑: 当我显示 VC 时,_CalendarAccess 的值似乎回到了初始值。如果我将 var _CalendarAccess = false 更改为 var _CalendarAccess = true,则在 VC 出现时为真。此外,当出现 VC 时,Calendar 变量是 nil,否则不是。

项目包含 same-named 框架,这导致编译器在多个位置查找相同的值。删除框架,问题解决:)