2011-10-14 7 views
6

लौटाता है जब मैं एक ईकेईवेंट की पहचानकर्ता प्राप्त करने का प्रयास करता हूं, तो मुझे एक शून्य मूल्य मिलता है। चूंकि आईओएस 5 में EKEvent EKCalendarItem का उप-वर्ग है, मुझे लगा कि मैं EKCalendarItem की UUID प्राप्त करने में सक्षम हो सकता हूं, लेकिन यह शून्य भी देता है।EKEvent eventIdentifier शून्य

हर अब और फिर मैं भी पहचानकर्ता या UUID संपत्ति का उपयोग करने की कोशिश कर रहा है, जबकि इस त्रुटि मिलती है:

CADObjectGetInlineStringProperty failed fetching uniqueID for EKPersistentEvent with error Error Domain=NSMachErrorDomain Code=268435459 "The operation couldn’t be completed. (Mach error 268435459 - (ipc/send) invalid destination port)" 

मैं पिछले कुछ समय से इस समस्या पर अब अटक गया है, लेकिन सोचा यह iOS5 होगा बीटा संबंधित। लेकिन चूंकि हम अब आईओएस 5 पर हैं, यह अभी भी काम नहीं कर रहा है।

[eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:&err]; 
NSString *strId = [[NSString alloc] initWithFormat:@"%@", event.eventIdentifier]; 

उत्तर

7

जब मैं एक EKEvent के पहचानकर्ता प्राप्त करने की कोशिश, सभी मैं बचाने के लिए और पहचानकर्ता से पहले अपने घटना के लिए प्रतिबद्ध करने के लिए एक नहीं के बराबर मूल्य है

कोशिश मेरे ऐप में मुझे पता चला कि यदि आप ईवेंट इवेंटेंटिफ़ायर के लिए पूछते हैं तो इवेंटस्टोर जो इसे लाया गया है, यह शून्य हो जाता है। लेकिन अगर आप इवेंट इंडेंटिफ़ायर से पूछें तो इससे पहले कि यह आईडी ठीक हो जाए। फिर आप EKEventStore इंस्टेंस को रिलीज़ कर सकते हैं और बिना किसी समस्या के पहचानकर्ता से पूछ सकते हैं .... ऐसा लगता है कि आईडी को पुनर्प्राप्त करने के लिए ईवेंटस्टोर की आवश्यकता है, लेकिन मुझे कोई चेतावनी नहीं मिलती है।

7

में:

+0

मुझे यह चेतावनी मिलती है, और मैंने पाया कि मैं जल्द ही अपना ईकेवेन्टस्टोर जारी कर रहा था। अब, मैं इसे तब तक पकड़ता हूं जब तक कि मैं अपने ईकेवेंट्स के साथ नहीं कर पाता, और सबकुछ ठीक है। मुझे अपना डेटा मिलता है और मुझे कोई चेतावनी नहीं है। –

+1

यह ऐप्पल दस्तावेज़ीकरण का हिस्सा होना चाहिए। – Dare2Dream

+0

यह एआरसी के साथ संयोजन में वास्तव में समस्याग्रस्त है।आपके खुदाई के लिए धन्यवाद, जो मुझे खोजने के लिए समय की एक अनावश्यक राशि ले जाएगा। –

2

eventIdentifier सेट किया जाता है जब ईवेंट EKEventStore में जोड़ा जाता है। यदि आप इसे जोड़ने से पहले इस मान तक पहुंचने का प्रयास करते हैं, तो यह शून्य हो जाएगा।

+1

मैं कैसे जान सकता हूं कि कैलेंडर में ईवेंट जोड़ने के लिए यह एसिंक प्रक्रिया समाप्त हो गई है या डीबी खत्म करने की प्रतिबद्ध प्रक्रिया है? क्योंकि मैं अभी भी saveEvent वाक्य –

2

बस इस समस्या से गुजर रही, मतदान eventIdentifier से पहले अशक्त हो जाएगा डेटाबेस के लिए प्रतिबद्ध, ताकि आप एक प्रतिबद्ध की जरूरत है: saveEvent समारोह में [self.eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:&error];

उसके बाद YES, आप eventIdentifier मिल सकती है।

मेरी गलती को प्रतिबद्ध करने के लिए कोई पास नहीं था: पैरामीटर।

+0

के बाद इसे एक्सेस करने का प्रयास करने के बाद भी शून्य प्राप्त कर रहा हूं, मैं कैसे जान सकता हूं कि कैलेंडर में ईवेंट जोड़ने के लिए यह एसिंक प्रक्रिया समाप्त हो गई है या डीबी खत्म करने की प्रतिबद्ध प्रक्रिया है? क्योंकि मैं अभी भी saveEvent वाक्य –

+0

के बाद इसे एक्सेस करने का प्रयास करने के बाद भी शून्य प्राप्त कर रहा हूं, यदि मैं प्रतिबद्ध करता हूं तो यह एक सिंक कॉल होगा: YES पैरामीटर, क्या आप ईवेंट इंडेंटिफ़ायर तक पहुंचने के लिए दो थ्रेड का उपयोग करते हैं और इसे सहेजते हैं? –

+0

हाँ मैंने पहले ही ऐसा किया है और यह धन्यवाद काम करता है –

0

मेरे लिए, eventIdentifier शून्य है क्योंकि मैं endDate सेट नहीं कर रहा था। तो आम तौर पर eventIdentifier उस घटना को बनाने में कोई त्रुटि होने पर शून्य हो सकती है। आप इस तरह की त्रुटियों की जांच कर सकते हैं:

NSError *err = nil; 
[store saveEvent:event span:EKSpanThisEvent commit:YES error:&err]; 
NSLog(@"Error : %@",err); 
0

EKEvent eventIdendifier ईवेंट सहेजे जाने तक उत्पन्न नहीं होता है। आप/दुकान के बाद आप स्विफ्ट 3

मुझे पता चला है के लिए EKEventStore

[store saveEvent:event span:EKSpanThisEvent error:&err]; 
    NSString *eventIdentifier = event.eventIdentifier; 
0

को घटना सहेजी गई हर कर सकते हैं eventIdentifier, कि मुद्दा यह है कि मैं अंदर दुकान बनाया है था कार्य जो तारीख को पुनर्प्राप्त करता है।

फ़ंक्शन के बाहर स्टोर बनाना और इसके उदाहरण का उपयोग करके समस्या हल हो गई।

class CalendarServices: NSObject { 

    var store = EKEventStore() 

    func fetchEventKitCalendarEvents(date: Date, completion: @escaping (_ events: [EKEvent]?, _ error: Error?)->()) { 

     let calendar = Calendar.current 

     guard self.getEventKitAuthorizationStatus() == .authorized else { 
      completion(nil, CoreServices.setError(message: "AuthorizationStatus != authorized")) 
      return 
     } 

     guard let endDate = calendar.date(byAdding: .day, value: 1, to: date) else { 
      completion(nil, CoreServices.setError(message: "Error creating endDate")) 
      return 
     } 

     CoreServices.background { 

      let predicate = self.store.predicateForEvents(withStart: date, end: endDate, calendars: self.fetchEventKitCalendars()) 

      let events = self.store.events(matching: predicate).sorted() { 
       (e1: EKEvent, e2: EKEvent) -> Bool in 
       return e1.startDate.compare(e2.startDate) == .orderedAscending 
      } 

      CoreServices.async { 

       completion(events, nil) 

      } 

     } 

    } 

} 
संबंधित मुद्दे