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
。
但是,当我在视图控制器中执行以下操作时,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
}
编辑: 当我点击调用 @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 框架,这导致编译器在多个位置查找相同的值。删除框架,问题解决:)
我有这个奇怪的错误。我有一个名为 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
。
但是,当我在视图控制器中执行以下操作时,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
}
编辑: 当我点击调用 @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 框架,这导致编译器在多个位置查找相同的值。删除框架,问题解决:)