2010-10-13 99 views
8

मैं अपने ऐप में ईवेंट सम्मिलित करना चाहता हूं, इसलिए उन्हें iPhone कैलेंडर.एप में देखा जा सकता है। लेकिन चूंकि मैं अपने ऐप से उन लोगों के साथ उपयोगकर्ता ईवेंट को मिश्रित नहीं करना चाहता, इसलिए मैं "माईएप इवेंट्स"आईफोन इवेंट किट: प्रोग्रामेटिक रूप से एक ईके कैलेंडर बनाएं?

जैसे ईके कैलेंडर बनाना चाहता था, क्या यह संभव है? आप अन्यथा अपनी घटनाओं को कैसे फ़िल्टर करेंगे?

धन्यवाद!

उत्तर

12

यह पूरी तरह अपने खुद के कैलेंडर बनाने के लिए संभव है - पकड़ है कि आप iOS 5 की आवश्यकता है:

EKEventStore* eventStore = [[EKEventStore alloc] init]; 
NSString* calendarName = @"My Cal"; 
EKCalendar* calendar; 

// Get the calendar source 
EKSource* localSource; 
for (EKSource* source in eventStore.sources) { 
    if (source.sourceType == EKSourceTypeLocal) 
    { 
     localSource = source; 
     break; 
    } 
} 

if (!localSource) 
    return; 

calendar = [EKCalendar calendarWithEventStore:eventStore]; 
calendar.source = localSource; 
calendar.title = calendarName; 

NSError* error; 
bool success= [eventStore saveCalendar:calendar commit:YES error:&error]; 
if (error != nil) 
{ 
    NSLog(error.description); 
    // TODO: error handling here 
} 
+0

आप यह देखने के लिए कैसे जांचेंगे कि कैलेंडर पहले से मौजूद है या नहीं? मैं दुर्घटना से बार-बार कैलेंडर बनाना नहीं चाहता हूं? – Slee

+0

जब आप कैलेंडर बनाते हैं तो कैलेंडर आईडीडिएंटर नामक एक संपत्ति होती है जो एक अद्वितीय पहचानकर्ता है। उस अद्वितीय पहचानकर्ता को स्टोर करें (और ईवेंट स्टोर पहचानकर्ता भी - सुनिश्चित करें कि इसमें बदलाव नहीं हुआ है) और ईवेंट स्टोर को यह देखने के लिए जांचें कि यह बनाने से पहले यह मौजूद है या नहीं। – kurtzmarc

+0

लेकिन यहां पकड़ है: मुझे लगता है कि यदि मेरा ऐप स्थानीय कैलेंडर बनाता है, तो उपयोगकर्ता इसे बाद में हटाने में असमर्थ है। यह एक बग की तरह लगता है। – matt

2

क्या आप (या किसी और के) के पास कोई नया कैलेंडर जोड़ने के साथ कोई प्रगति है?

मुझे एक ही स्थिति मिल गई है। मैं प्रोग्राम्सैटिक रूप से डिफ़ॉल्ट कैलेंडर में ईवेंट को पूरी तरह से अच्छी तरह से जोड़ सकता हूं, लेकिन मैं उन्हें एक नए कैलेंडर में जोड़ना चाहता हूं, इसलिए वे ईवेंट को पूर्ववत करने वाले उपयोगकर्ताओं के साथ हस्तक्षेप नहीं करते हैं, और हटाए जाने के बजाय उपयोगकर्ता द्वारा आसानी से हटाया/छुपाया जा सकता है सभी घटनाओं मैन्युअल रूप से।

आप एक नई EKCalendar ऑब्जेक्ट के लिए गुण सेट नहीं कर सकते हैं। ऐसा लगता है कि आप केवल एक ekCalendar ऑब्जेक्ट में डिफ़ॉल्ट कैलेंडरफॉरन्यूवेंट्स जैसे एक्ससिटिंग को असाइन कर सकते हैं।

हालांकि, मुझे पता है कि प्रोग्रामेटिक रूप से नया कैलेंडर बनाना संभव है, क्योंकि मैंने देखा है कि आईफोन ऐप ऐसा कर रहा है (ऐप छोड़ दिए बिना)।

  • क्या यह हो सकता है कि वे बाहरी आईसीएस फ़ाइल के साथ कुछ चाल करके कामकाज का उपयोग करें?
  • शायद किसी URL के बजाय स्थानीय (आईफोन/ऐप फाइल सिस्टम पर) आईसीएस फ़ाइल उत्पन्न करने के लिए "सब्सक्राइबिंग" करके ऐसा करना संभव है। क्या किसी को इसका कोई अनुभव है?
+0

यह वास्तव में काम कर सकता है !! मैं इस कोशिश की कोशिश करूंगा ... – Marsson

+0

इस मामले के बारे में कोई प्रगति? – Buju

0

इस तरह आप बाहर एक कैलेंडर पहले से ही विशिष्ट शीर्षक के साथ मौजूद है या नहीं की जाँच कर सकते है। यदि यह अस्तित्व में नहीं है तो आप इसे प्रोग्रामिक रूप से बना सकते हैं।

एक बूलियन प्रकार चर घोषित

BOOL doesExist=NO; 
    EKEventStore *eventStore=[[EKEventStore alloc] init]; 

    NSArray *calanders=[eventStore calendarsForEntityType:EKEntityTypeEvent]; 

    //Now Iterate through every calendar in the array and match its title 
    // with the title that you want to create 



for(EKCalendar calendar in calendars) 
    { 
     if([[calendar title] isEqualToString:@"youdesiredname"]) 
      { 
        doesExist=YES; 
      } 

    } 

// अगर हमारे bool चर मान तो अब जाँच हाँ इसका मतलब है कि एक ही नाम/शीर्षक के साथ एक कैलेंडर पहले से ही कोई exists.if तो आप बना सकते हैं

if(!doesExist) 
    { 
     NSString* calendarName = @"DesiredCalendarName"; 
     EKCalendar* calendar; 


     EKSource* localSource; 
     for (EKSource* source in eventStore.sources) { 
     if (source.sourceType == EKSourceTypeLocal) 
     { 
     localSource = source; 
     break; 
     } 




    if (!localSource) 
     return; 

     calendar = [EKCalendar calendarWithEventStore:eventStore]; 
     calendar.source = localSource; 
     calendar.title = calendarName; 


     EKEvent *event = [EKEvent eventWithEventStore:eventStore]; 
     calendar = [eventStore calendarWithIdentifier:self.calendarIdentifier]; 
     event.calendar = calendar; 

     // Set the start date to the current date/time and the event duration to one hour 
     NSDate *startDate = [NSDate date]; 
     event.startDate = startDate; 
     event.endDate = [startDate dateByAddingTimeInterval:3600]; 

     //And to save the event to the event database: 

     NSError *error = nil; 
    BOOL result = [eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:&error]; 
    if (result) 
    { 
    NSLog(@"Saved event to event store.") 
    } 
    else 
    { 
    NSLog(@"Error saving event: %@.", saveError); 
    } 

     NSError* error; 
     bool success= [eventStore saveCalendar:calendar commit:YES error:&error]; 
     if (error != nil) 
     { 
     NSLog(error.description); 

     } 

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