मेरे कोड में मैं एक EKEventstore से एक ईवेंट पुनर्प्राप्त करता हूं और फिर मैं मानों को एक कस्टम स्विफ्ट ऑब्जेक्ट में मैप करता हूं

public class WPEvent: NSObject, NSCopying, Comparable {

let ddLogLevel = DDLogLevel.verbose

static let vacationPrefix = "Vacation"
static let visitReportPrefix = "* "

public var eventIdentifier: String
public var calendar: EKCalendar
public var title: String
public var allDay: Bool
public var detached: Bool
public var unsafed: Bool
public var creationDate: Date?
public var startDate: Date
public var endDate: Date
public var timeZone: TimeZone?
public var location: String?

public init(event: EKEvent) {
    eventIdentifier = event.eventIdentifier
    calendar = event.calendar
    title = event.title
    allDay = event.isAllDay
    detached = event.isDetached
    unsafed = event.isNew
    creationDate = event.creationDate
    startDate = event.startDate
    endDate = event.endDate
    timeZone = event.timeZone
    location = event.location

    super.init()
}

और मेरे सभी परीक्षणों में यह गुजरता है और ठीक है। हाल ही में हालांकि मुझे इस तरह की कुछ अजीब दुर्घटना रिपोर्ट मिलनी शुरू हो गई है

Hardware Model:      iPad5,4
OS Version:          iOS 10.2.1 (14D27)
Report Version:      105

Exception Type:  SIGTRAP
Exception Subtype: undefined

Thread 12 name:
Thread 12 Crashed:
0   libswiftFoundation.dylib         0x000000010295179c 0x102948000 + 38812
1   CalendarSyncEngine               0x0000000101399520 specialized WPEvent.init(event:) (WPEvent.swift:49)
2   CalendarSyncEngine               0x00000001013844b8 specialized EKEventStoreWrapper.events(withStart:end:salesRepId:) (EventStore.swift:0)
3   CalendarSyncEngine               0x00000001013846fc specialized EKEventStoreWrapper.events(forDate:salesRepId:) (EventStore.swift:0)

लाइन 49 वह जगह है जहां एंडडेट असाइन किया गया है, और यदि यह क्रैश हो जाता है तो हमेशा वहां होता है।

क्या इवेंटकिट एपीआई इसे निहित अलिखित वैकल्पिक के रूप में सूचीबद्ध करता है, भले ही शून्य-समाप्ति प्राप्त करना संभव है?

जाहिर है हाँ (टिप्पणियों के लिए धन्यवाद)

चूंकि यह मान ऐप्पल ढांचे से प्रदान किया जाता है, मैं कैसे जांच सकता हूं कि उस बिंदु पर दुर्घटना के बिना यह शून्य है या नहीं?

अपडेट करें: जैसा कि AppleDoc में बताया गया है, पुन: प्रस्तुत करना काफी सरल है "@discussion जब तक आप इसे सेट नहीं करते तब तक यह नई घटनाओं के लिए शून्य होगा।" तो बस इसे सेट न करें, लेकिन मैं अभी भी यह नहीं समझ सकता कि कैसे जांचा जाए कि इस घटना की इसे क्रैश किए बिना कोई समाप्ति तिथि नहीं है या नहीं।

0
Hons 23 अक्टूबर 2017, 17:30
EventKit API का कहना है कि यह है निहित अलिखित वैकल्पिक इसलिए यह nil हो सकता है
 – 
vadian
23 अक्टूबर 2017, 17:33
आप यह क्यों कहते हैं कि EventKit API कहता है कि EKEvent endDate वैकल्पिक नहीं है? यह स्पष्ट रूप से वैकल्पिक के रूप में प्रलेखित है। ! का अर्थ अभी भी वैकल्पिक है। और क्रैश निश्चित रूप से इसे साबित करते हैं।
 – 
rmaddy
23 अक्टूबर 2017, 17:33
टिप्पणियों के लिए THX ... हाँ, आप सही हैं, मैं प्रश्न अपडेट कर दूंगा।
 – 
Hons
23 अक्टूबर 2017, 17:43
आप nil की जांच करते हैं जैसे आप कोई वैकल्पिक करेंगे।
 – 
rmaddy
23 अक्टूबर 2017, 17:53
मैंने इसे endDate = (event.endDate as Date?) ?? event.startDate सफलता के बिना किया है... अभी भी क्रैश हो रहा है
 – 
Hons
23 अक्टूबर 2017, 17:57

1 उत्तर

सबसे बढ़िया उत्तर

मैं अपने स्विफ्ट ढांचे में उद्देश्य-सी कोड का एक छोटा सा टुकड़ा जोड़ने में समाप्त हुआ जो शून्य पर जांच करता है और दुर्घटना से बचने के लिए कुछ मूल्यों के साथ तिथियों को भरता है

1
Hons 25 अक्टूबर 2017, 13:18