আইফোন ক্যালেন্ডারে প্রোগ্রামগতভাবে কাস্টম ইভেন্ট যুক্ত করুন


181

কাস্টম অ্যাপ থেকে আইফোন ক্যালেন্ডারে আইকল ইভেন্ট যুক্ত করার কোনও উপায় আছে কি?

উত্তর:


166

অ্যাপল ডকুমেন্টেশনের উপর ভিত্তি করে , এটি আইওএস 6.0 হিসাবে কিছুটা পরিবর্তন করেছে।

1) আপনার ব্যবহারকারীর ক্যালেন্ডারে অ্যাক্সেসের অনুরোধ করা উচিত "অনুরোধঅ্যাক্সেসটো-এন্টিটি টাইপ: সমাপ্তি:" এর মাধ্যমে এবং কোনও ব্লকের ভিতরে ইভেন্টটি পরিচালনা করে চালানো উচিত।

2) আপনার এখনই আপনার ইভেন্টটি প্রতিশ্রুতিবদ্ধ করতে হবে বা আপনার সেভ / রিমুভ কলকে "কমিট" পরম পাস করতে হবে

বাকি সব একই থাকে ...

ইভেন্টকিট ফ্রেমওয়ার্ক এবং #import <EventKit/EventKit.h>আপনার কোডে যুক্ত করুন।

আমার উদাহরণে, আমার কাছে একটি এনএসএসস্ট্রিং * সেভডভেন্ট আইডি উদাহরণ সম্পত্তি রয়েছে।

একটি ইভেন্ট যুক্ত করতে:

    EKEventStore *store = [EKEventStore new];
    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        if (!granted) { return; }
        EKEvent *event = [EKEvent eventWithEventStore:store];
        event.title = @"Event Title";
        event.startDate = [NSDate date]; //today
        event.endDate = [event.startDate dateByAddingTimeInterval:60*60];  //set 1 hour meeting
        event.calendar = [store defaultCalendarForNewEvents];
        NSError *err = nil;
        [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err];
        self.savedEventId = event.eventIdentifier;  //save the event id if you want to access this later
    }];

ইভেন্টটি সরান:

    EKEventStore* store = [EKEventStore new];
    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        if (!granted) { return; }
        EKEvent* eventToRemove = [store eventWithIdentifier:self.savedEventId];
        if (eventToRemove) {
            NSError* error = nil;
            [store removeEvent:eventToRemove span:EKSpanThisEvent commit:YES error:&error];
        }
    }];

এটি আপনার ডিফল্ট ক্যালেন্ডারে ইভেন্টগুলি যুক্ত করে, যদি আপনার একাধিক ক্যালেন্ডার থাকে তবে আপনি এটি কোনটি খুঁজে পাবেন

সুইফ্ট সংস্করণ

আপনার ইভেন্টকিট ফ্রেমওয়ার্কটি আমদানি করতে হবে

import EventKit

ইভেন্ট যোগ করুন

let store = EKEventStore()
store.requestAccessToEntityType(.Event) {(granted, error) in
    if !granted { return }
    var event = EKEvent(eventStore: store)
    event.title = "Event Title"
    event.startDate = NSDate() //today
    event.endDate = event.startDate.dateByAddingTimeInterval(60*60) //1 hour long meeting
    event.calendar = store.defaultCalendarForNewEvents
    do {
        try store.saveEvent(event, span: .ThisEvent, commit: true)
        self.savedEventId = event.eventIdentifier //save event id to access this particular event later
    } catch {
        // Display error to user
    }
}

ইভেন্ট সরান

let store = EKEventStore()
store.requestAccessToEntityType(EKEntityTypeEvent) {(granted, error) in
    if !granted { return }
    let eventToRemove = store.eventWithIdentifier(self.savedEventId)
    if eventToRemove != nil {
        do {
            try store.removeEvent(eventToRemove, span: .ThisEvent, commit: true)
        } catch {
            // Display error to user
        }
    }
}

6
আমার জন্য কাজ করে না, সবকিছু ডাব্লু / ও ত্রুটিগুলিতে চলে যায় তবে ক্যালেন্ডারে কোনও ইভেন্ট হয় না
বোরিস গফুরভ

সবকিছুই পূর্ববর্তী বস্তুতে সঞ্চয় করছে তবে ক্যালেন্ডারের অভ্যন্তরে সংরক্ষণ করছে না hlp আমাকে

1
@ উইলিয়াম টি: আমি কি ক্যালেন্ডার অ্যাপের ইভেন্ট স্ক্রিন যুক্ত করতে (ইউআরএল স্কিম ব্যবহার করে) উপস্থাপন করতে এবং ইভেন্টের তথ্যটি পাস করতে পারি যাতে ইভেন্টের স্ক্রিন যুক্ত করার সময় এটিতে পূর্বে পূর্ণ ডেটা থাকবে। ব্যবহারকারীর কেবল ইভেন্ট ইভেন্ট বোতাম টিপতে হবে। আপনার উদাহরণে ব্যবহারকারীর কোনও ইঙ্গিত ছাড়াই ইভেন্ট যুক্ত হয়েছে।
উঃ

1
যদি সবগুলি এখনও কাজ করে বলে মনে হয় তবে কোনও ক্যালেন্ডার প্রদর্শিত না হয়, তবে ক্লাউড ভিএস স্থানীয় ক্যালেন্ডারগুলি এটি কিনা তা পরীক্ষা করে দেখুন। আপনার যদি ক্লাউড এবং স্থানীয় ক্যালেন্ডারগুলির মিশ্রণ থাকে তবে ক্লাউড ক্যালেন্ডারগুলি স্থানীয় ক্যালেন্ডারগুলিকে লুকিয়ে রাখতে বাধ্য করতে পারে।
জোনাবি

2
@ রেডিবাশা যখন আপনি ইভেন্টটি যুক্ত করেন, আপনাকে ইভেন্টের পরিচয়দাতাটি সঞ্চয় করে ভবিষ্যতে ব্যবহারের জন্য সঞ্চয় করতে হবে। আপনি যখন ইভেন্ট আইডিটি সরাতে যান তখন আপনার ব্যবহার করা উচিত use
উইলিয়াম টি।

154

আপনি OS 4.0 এ ইভেন্ট কিট কাঠামোটি ব্যবহার করে এটি করতে পারেন।

উইন্ডোর বামে গ্রুপ এবং ফাইল নেভিগেটরে ফ্রেম ওয়ার্কস গ্রুপে ডান ক্লিক করুন। 'যুক্ত করুন' তারপরে 'বিদ্যমান ফ্রেম ওয়ার্কস' তারপরে 'ইভেন্টকিট.ফ্রেমওয়ার্ক' নির্বাচন করুন।

তারপরে আপনার এই জাতীয় কোড সহ ইভেন্টগুলি যুক্ত করতে সক্ষম হওয়া উচিত:

#import "EventTestViewController.h"
#import <EventKit/EventKit.h>

@implementation EventTestViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    EKEventStore *eventStore = [[EKEventStore alloc] init];

    EKEvent *event  = [EKEvent eventWithEventStore:eventStore];
    event.title     = @"EVENT TITLE";

    event.startDate = [[NSDate alloc] init];
    event.endDate   = [[NSDate alloc] initWithTimeInterval:600 sinceDate:event.startDate];

    [event setCalendar:[eventStore defaultCalendarForNewEvents]];
    NSError *err;
    [eventStore saveEvent:event span:EKSpanThisEvent error:&err];       
}

@end

18
এই পোস্ট করার জন্য ধন্যবাদ। যারা এটি পড়ে তাদের কেবল একটি অনুস্মারক: স্মৃতি ফাঁস হওয়ার জন্য নজর রাখুন। এই কোড নমুনায় একটি দম্পতি আছে। এছাড়াও, সেরা অনুশীলনগুলি নির্দেশ করে যে আপনি সেভ এভেন্টের পরে 'ত্রুটি' এর মান পরীক্ষা করে দেখুন: স্প্যান: ত্রুটি এবং তদনুসারে জিনিসগুলি পরিচালনা করে।
ডেভিড কার্নি

আপনি কীভাবে পুনরাবৃত্ত ইভেন্ট যুক্ত করবেন জানেন? প্রতি সোমবারের মতো একটি অনুষ্ঠানের মতো?
জে ওয়াচনি

5
পুনরাবৃত্ত ইভেন্টটি প্রোগ্রামযুক্তভাবে যুক্ত করুন: এটি বিকাশকারী.অ্যাপল . com/ লিবেরি / আইওএস /# ডকুমেন্টেশন / ইভেন্টকিট/… ​​দেখুন । আরেকটি বিকল্প হ'ল ইভেন্টগুলি যুক্ত করার / সম্পাদনার জন্য ডিফল্ট ফ্রেমওয়ার্ক-সরবরাহিত ভিউ কন্ট্রোলারগুলি ব্যবহার করা (ক্যালেন্ডার এট-এ- গ্লানস অ্যাপ্লিকেশন bit.ly/cJq4Bh এর মতো )। এই বিকল্পের জন্য, বিকাশকারী.অ্যাপল.
com

এক্সকোড 4-তে ফ্রেমওয়ার্ক যুক্ত করতে এই এই প্রশ্নটি দেখুন: stackoverflow.com/questions/3352664/…
নেট

1
4.0? 6-তে উড়ে যাবে না উপরের উত্তরটি দেখুন
বোরিস গফুরভ

13

হ্যাঁ এর জন্য এখনও কোনও এপিআই নেই (২.১) তবে দেখে মনে হয়েছিল ডাব্লুডাব্লুডিসিতে প্রচুর লোক ইতিমধ্যে কার্যকারিতাটিতে আগ্রহী ছিল (আমাকে সহ) এবং নীচের সাইটে গিয়ে এই জন্য একটি বৈশিষ্ট্য অনুরোধ তৈরি করার পরামর্শ দেওয়া হয়েছিল। যদি আগ্রহের যথেষ্ট পরিমাণ থাকে তবে তারা আইসিএল.ফ্রেমওয়ার্কটি পাবলিক এসডিকে স্থানান্তর করতে পারে।

https://developer.apple.com/bugreporter/


5
উত্তর পুরানো হয়েছে, এটিকে সরাতে বিবেচনা করুন
জেস্পার

12

আইফোন ওএস ৪.০ এ ক্যালেন্ডার অ্যাক্সেস যুক্ত করা হচ্ছে :

ক্যালেন্ডার অ্যাক্সেস
অ্যাপ্লিকেশনগুলি ইভেন্ট ইভেন্ট কিট দিয়ে সরাসরি ক্যালেন্ডার অ্যাপে ইভেন্টগুলি তৈরি এবং সম্পাদনা করতে পারে।
পুনরাবৃত্ত ইভেন্টগুলি তৈরি করুন, শুরু এবং শেষ সময় সেট আপ করুন এবং এটিকে ডিভাইসের যে কোনও ক্যালেন্ডারে নির্ধারণ করুন।


1
আপনার লিঙ্কটি এখন ভেঙে গেছে।
আদিল সোমো

5

আপনি ইভেন্টের এপিআই ব্যবহার করে ইভেন্টটি ত্রিস্টানের মতো রূপরেখার মতো যুক্ত করতে পারেন এবং আপনি একটি আইওএস ক্যালেন্ডারে প্রদর্শিত একটি গুগল ক্যালেন্ডার ইভেন্টও যুক্ত করতে পারেন।

ব্যবহার Google এর এপিআই উদ্দেশ্য সি ক্লায়েন্ট

  - (void)addAnEvent {
  // Make a new event, and show it to the user to edit
  GTLCalendarEvent *newEvent = [GTLCalendarEvent object];
  newEvent.summary = @"Sample Added Event";
  newEvent.descriptionProperty = @"Description of sample added event";

  // We'll set the start time to now, and the end time to an hour from now,
  // with a reminder 10 minutes before
  NSDate *anHourFromNow = [NSDate dateWithTimeIntervalSinceNow:60*60];
  GTLDateTime *startDateTime = [GTLDateTime dateTimeWithDate:[NSDate date]
                                                    timeZone:[NSTimeZone systemTimeZone]];
  GTLDateTime *endDateTime = [GTLDateTime dateTimeWithDate:anHourFromNow
                                                  timeZone:[NSTimeZone systemTimeZone]];

  newEvent.start = [GTLCalendarEventDateTime object];
  newEvent.start.dateTime = startDateTime;

  newEvent.end = [GTLCalendarEventDateTime object];
  newEvent.end.dateTime = endDateTime;

  GTLCalendarEventReminder *reminder = [GTLCalendarEventReminder object];
  reminder.minutes = [NSNumber numberWithInteger:10];
  reminder.method = @"email";

  newEvent.reminders = [GTLCalendarEventReminders object];
  newEvent.reminders.overrides = [NSArray arrayWithObject:reminder];
  newEvent.reminders.useDefault = [NSNumber numberWithBool:NO];

  // Display the event edit dialog
  EditEventWindowController *controller = [[[EditEventWindowController alloc] init] autorelease];
  [controller runModalForWindow:[self window]
                          event:newEvent
              completionHandler:^(NSInteger returnCode, GTLCalendarEvent *event) {
                // Callback
                if (returnCode == NSOKButton) {
                  [self addEvent:event];
                }
              }];
}

5

সুইফট 4.0 বাস্তবায়ন:

পৃষ্ঠার শীর্ষে আমদানি ব্যবহার করুন import EventKit

তারপর

@IBAction func addtoCalendarClicked(sender: AnyObject) {

    let eventStore = EKEventStore()

    eventStore.requestAccess( to: EKEntityType.event, completion:{(granted, error) in

        if (granted) && (error == nil) {
            print("granted \(granted)")
            print("error \(error)")

            let event = EKEvent(eventStore: eventStore)

            event.title = "Event Title"
            event.startDate = Date()
            event.endDate = Date()
            event.notes = "Event Details Here"
            event.calendar = eventStore.defaultCalendarForNewEvents

            var event_id = ""
            do {
                try eventStore.save(event, span: .thisEvent)
                event_id = event.eventIdentifier
            }
            catch let error as NSError {
                print("json error: \(error.localizedDescription)")
            }

            if(event_id != ""){
                print("event added !")
            }
        }
    })
}

আপনি কি একই উত্তর @ দশরথ সম্পর্কিত গুগল ক্যালেন্ডারে আমাকে সাহায্য করতে পারেন
দিলীপ তিওয়ারি

4

দশরথ উত্তরের জন্য সুইফট 4-এর আপডেট

import UIKit
import EventKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let eventStore = EKEventStore()

        eventStore.requestAccess( to: EKEntityType.event, completion:{(granted, error) in

            if (granted) && (error == nil) {


                let event = EKEvent(eventStore: eventStore)

                event.title = "My Event"
                event.startDate = Date(timeIntervalSinceNow: TimeInterval())
                event.endDate = Date(timeIntervalSinceNow: TimeInterval())
                event.notes = "Yeah!!!"
                event.calendar = eventStore.defaultCalendarForNewEvents

                var event_id = ""
                do{
                    try eventStore.save(event, span: .thisEvent)
                    event_id = event.eventIdentifier
                }
                catch let error as NSError {
                    print("json error: \(error.localizedDescription)")
                }

                if(event_id != ""){
                    print("event added !")
                }
            }
        })
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

ক্যালেন্ডার ব্যবহারের জন্য অনুমতি যোগ করতে ভুলবেন না ব্যক্তিগত গোপনীয়তার জন্য চিত্র


2

সুইফট -২.২ এ ওয়ার্কিং কোড

import UIKit
import EventKit
import EventKitUI

class yourViewController: UIViewController{

    let eventStore = EKEventStore()

    func addEventToCalendar() {

    eventStore.requestAccess( to: EKEntityType.event, completion:{(granted, error) in
        DispatchQueue.main.async {
            if (granted) && (error == nil) {
                let event = EKEvent(eventStore: self.eventStore)
                event.title = self.headerDescription
                event.startDate = self.parse(self.requestDetails.value(forKey: "session_time") as? String ?? "")
                event.endDate = self.parse(self.requestDetails.value(forKey: "session_end_time") as? String ?? "")
                let eventController = EKEventEditViewController()
                eventController.event = event
                eventController.eventStore = self.eventStore
                eventController.editViewDelegate = self
                self.present(eventController, animated: true, completion: nil)

            }
        }


       })
    }

}

এখন আমরা ইভেন্টের পর্দা পাব এবং এখানে আপনি নিজের সেটিংস সংশোধন করতে পারেন:

এখানে চিত্র বর্ণনা লিখুন

এখন বাতিল হ্যান্ডেল করতে প্রতিনিধি পদ্ধতি যুক্ত করুন এবং ইভেন্টের স্ক্রিনের ইভেন্ট বোতামটির ক্রিয়া যুক্ত করুন:

    extension viewController: EKEventEditViewDelegate {

    func eventEditViewController(_ controller: EKEventEditViewController, didCompleteWith action: EKEventEditViewAction) {
        controller.dismiss(animated: true, completion: nil)

    }
}

দ্রষ্টব্য: তথ্য প্লাস্টে এনএসক্যালেন্ডারসেজেজ বিবরণ কী যুক্ত করতে ভুলবেন না ।


1

তৈরি ইভেন্টে শেষ তারিখ সেট করতে মনে রাখবেন, এটি বাধ্যতামূলক।

অন্যথায় এটি এই ত্রুটির সাথে ব্যর্থ হবে (প্রায় নিঃশব্দে):

"Error Domain=EKErrorDomain Code=3 "No end date has been set." UserInfo={NSLocalizedDescription=No end date has been set.}"

আমার জন্য সম্পূর্ণ কার্য কোডটি হ'ল:

EKEventStore *store = [EKEventStore new];
[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
    if (!granted) { return; }
    EKEvent *calendarEvent = [EKEvent eventWithEventStore:store];
    calendarEvent.title = [NSString stringWithFormat:@"CEmprendedor: %@", _event.name];
    calendarEvent.startDate = _event.date;
    // 5 hours of duration, we must add the duration of the event to the API
    NSDate *endDate = [_event.date dateByAddingTimeInterval:60*60*5];
    calendarEvent.endDate = endDate;
    calendarEvent.calendar = [store defaultCalendarForNewEvents];
    NSError *err = nil;
    [store saveEvent:calendarEvent span:EKSpanThisEvent commit:YES error:&err];
    self.savedEventId = calendarEvent.eventIdentifier;  //saving the calendar event id to possibly deleted them
}];

1
এবং এও মনে রাখবেন যে শেষের তারিখটি শুরু হওয়ার তারিখের চেয়ে সমান বা বড় হতে হবে অন্যথায়, আপনি অন্য একটি ত্রুটি পাবেন।
মুডি

0

গুগল ধারণাটি একটি দুর্দান্ত, তবে সমস্যা আছে।

আমি সফলভাবে একটি গুগল ক্যালেন্ডার ইভেন্টের স্ক্রিনটি খুলতে পারি - তবে কেবলমাত্র মূল ডেস্কটপ সংস্করণে এবং এটি আইফোন সাফারিতে সঠিকভাবে প্রদর্শিত হয় না। গুগল মোবাইল ক্যালেন্ডার, যা সাফারিতে সঠিকভাবে প্রদর্শিত হয়, ইভেন্টগুলি যুক্ত করতে API এর সাথে কাজ করছে বলে মনে হয় না।

এই মুহুর্তের জন্য, আমি এ থেকে ভাল উপায় দেখতে পাচ্ছি না।


0

সরল .... তপ্কু লাইব্রেরি ব্যবহার করুন .... আপনি সেই শব্দটি গুগল করতে পারেন এবং এটি ব্যবহার করতে পারেন ... এটির মুক্ত উত্স ... উপভোগ করুন ..... এই কোডগুলির সাথে বাগ করার দরকার নেই ....



ক্যালেন্ডার অ্যাপ্লিকেশন ইভেন্টগুলির সাথে তপ্কু লাইব্রেরি ক্যালেন্ডার সিঙ্ক্রোনাইজ করতে পারে
কোডার 1010

আমি শুধু জানি যে তপকু লাইব্রেরি একটি ক্যালেন্ডার উপাদান নিয়ন্ত্রণ যা ডেটা উত্স নামে একটি বিকল্প রয়েছে। আপনার উত্সটি যেখানে আপনি যে উত্সটি থেকে
এনেছেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.