का उपयोग कर डिवाइस कैलेंडर में कोई ईवेंट कैसे जोड़ें, मुझे डिवाइस में कैलेंडर ईवेंट जोड़ने का तरीका जानने में दिलचस्पी होगी, लेकिन स्विफ्ट का उपयोग करना। मुझे पता है कि उद्देश्य-सी में कुछ उदाहरण दिए गए हैं, लेकिन फिलहाल कुछ भी तेज नहीं है। बहुत धन्यवाद।स्विफ्ट
स्विफ्ट
उत्तर
स्विफ्ट 3.0 संस्करण
let eventStore : EKEventStore = EKEventStore()
// 'EKEntityTypeReminder' or 'EKEntityTypeEvent'
eventStore.requestAccess(to: .event) { (granted, error) in
if (granted) && (error == nil) {
print("granted \(granted)")
print("error \(error)")
let event:EKEvent = EKEvent(eventStore: eventStore)
event.title = "Test Title"
event.startDate = Date()
event.endDate = Date()
event.notes = "This is a note"
event.calendar = eventStore.defaultCalendarForNewEvents
do {
try eventStore.save(event, span: .thisEvent)
} catch let error as NSError {
print("failed to save event with error : \(error)")
}
print("Saved Event")
}
else{
print("failed to save event with error : \(error) or access not granted")
}
}
संदर्भ: https://gist.github.com/mchirico/d072c4e38bda61040f91
: आयात EventKit यह –
काम करने के लिए यह देता है त्रुटि "अनसुलझा पहचानकर्ता EKEntityTypeEvent का उपयोग"। क्या मैं कुछ भूल रहा हूँ ? – Dashrath
@ दशरथ 'EKEntityType.Event' का उपयोग करें (स्विफ्ट 2.0 में कुछ बदलाव) –
मैं इस समायोजित करने और संकलक टिप्पणी में उल्लेख किया त्रुटि को खत्म करने में सक्षम था उपर्युक्त उत्तरों (और कुछ अन्य) के अनुसार, निम्नानुसार:
var eventStore : EKEventStore = EKEventStore()
// 'EKEntityTypeReminder' or 'EKEntityTypeEvent'
eventStore.requestAccessToEntityType(EKEntityType.Event, completion: {
(granted, error) in
if (granted) && (error == nil) {
print("granted \(granted)")
print("error \(error)")
var event:EKEvent = EKEvent(eventStore: eventStore)
event.title = "Test Title"
event.startDate = NSDate()
event.endDate = NSDate()
event.notes = "This is a note"
event.calendar = eventStore.defaultCalendarForNewEvents
eventStore.saveEvent(event, span: EKSpan.ThisEvent, error: nil)
print("Saved Event")
}
})
हालांकि, मुझे अभी भी निम्न त्रुटि मिलती है वह "EKSpan.ThisEvent" के बारे में नीचे है: कॉल में गलत तर्क लेबल (: अवधि: त्रुटि: ', अपेक्षित': अवधि: प्रतिबद्ध: ')।
मैंने "त्रुटि" को "प्रतिबद्ध" में बदलने की कोशिश की, लेकिन इसने मुझे एक कंपाइलर त्रुटि दी और कहा कि यह शून्य की बजाय बूल की अपेक्षा करता है। यह तेजी से वाक्यविन्यास में अद्यतन के साथ एक समस्या की तरह लगता है।
संपादित करें: मैं this tutorial के बाद समाप्त हुआ और इसे काम करने में सक्षम था।
सबसे पहले, कैलेंडर तक पहुंचने के लिए अनुमति मांगें और (यदि वह अनुमति दी जाती है) ईवेंट जोड़ने के लिए एक फ़ंक्शन को कॉल करें।
var savedEventId : String = "" func requestAccessPermission() { let eventStore = EKEventStore() let startDate = NSDate() let endDate = startDate.dateByAddingTimeInterval(60 * 60) // Ends one hour later if (EKEventStore.authorizationStatusForEntityType(.Event) != EKAuthorizationStatus.Authorized) { eventStore.requestAccessToEntityType(.Event, completion: { granted, error in self.createEvent(eventStore, title: "Test Title", startDate: startDate, endDate: endDate) }) } else { createEvent(eventStore, title: "Test Title", startDate: startDate, endDate: endDate) } }
समारोह है कि इसके बाद के संस्करण कोड स्निपेट में कहा जाता है घटना जोड़ने के लिए:
func createEvent(eventStore: EKEventStore, title: String, startDate: NSDate, endDate: NSDate) { let event = EKEvent(eventStore: eventStore) event.title = title event.startDate = startDate event.endDate = endDate event.calendar = eventStore.defaultCalendarForNewEvents do { try eventStore.saveEvent(event, span: .ThisEvent) savedEventId = event.eventIdentifier } catch { print("Error Saving") } }
स्विफ्ट 3.0 संगत:
func addEventToCalendar(title: String, description: String?, startDate: Date, endDate: Date, completion: ((_ success: Bool, _ error: NSError?) -> Void)? = nil) {
let eventStore = EKEventStore()
eventStore.requestAccess(to: .event, completion: { (granted, error) in
if (granted) && (error == nil) {
let event = EKEvent(eventStore: eventStore)
event.title = title
event.startDate = startDate
event.endDate = endDate
event.notes = description
event.calendar = eventStore.defaultCalendarForNewEvents
do {
try eventStore.save(event, span: .thisEvent)
} catch let e as NSError {
completion?(false, e)
return
}
completion?(true, nil)
} else {
completion?(false, error as NSError?)
}
})
}
और यह भी आयात EventKit
तो आप आसानी से हर जगह से इस विधि कॉल कर सकते हैं:
addEventToCalendar(title: "Girlfriend birthday", description: "Remember or die!", startDate: NSDate(), endDate: NSDate())
यदि आप चाहें, तो आप एक utiliy वर्ग के अंदर इस विधि रख दिया और 'स्थिर' के रूप में यह परिभाषित कर सकते हैं।
में "गोपनीयता - कैलेंडर उपयोग विवरण" जोड़ने की आवश्यकता है। अच्छा, साफ, कामकाजी उत्तर –
आपको "गोपनीयता - कैलेंडर उपयोग विवरण" "info.plist में। –
आपको info.plist पर "गोपनीयता - कैलेंडर्स उपयोग विवरण" जोड़ने की आवश्यकता है। के बाद कोड xcode के नवीनतम संस्करण को और तेज के साथ काम करता 3.
import EventKit
class EventHelper
{
let appleEventStore = EKEventStore()
var calendars: [EKCalendar]?
func generateEvent() {
let status = EKEventStore.authorizationStatus(for: EKEntityType.event)
switch (status)
{
case EKAuthorizationStatus.notDetermined:
// This happens on first-run
requestAccessToCalendar()
case EKAuthorizationStatus.authorized:
// User has access
print("User has access to calendar")
self.addAppleEvents()
case EKAuthorizationStatus.restricted, EKAuthorizationStatus.denied:
// We need to help them give us permission
noPermission()
}
}
func noPermission()
{
print("User has to change settings...goto settings to view access")
}
func requestAccessToCalendar() {
appleEventStore.requestAccess(to: .event, completion: { (granted, error) in
if (granted) && (error == nil) {
DispatchQueue.main.async {
print("User has access to calendar")
self.addAppleEvents()
}
} else {
DispatchQueue.main.async{
self.noPermission()
}
}
})
}
func addAppleEvents()
{
let event:EKEvent = EKEvent(eventStore: appleEventStore)
event.title = "Test Event"
event.startDate = NSDate() as Date
event.endDate = NSDate() as Date
event.notes = "This is a note"
event.calendar = appleEventStore.defaultCalendarForNewEvents
do {
try appleEventStore.save(event, span: .thisEvent)
print("events added with dates:")
} catch let e as NSError {
print(e.description)
return
}
print("Saved Event")
}
}
यह वास्तव में आईओएस 11.2 Xcode 9.2 पर धीमी थी, इसलिए मैं कतारों का उपयोग करने के लिए लुका Davanzo के जवाब संशोधित (बहुत तेजी से काम करता है):
func addEventToCalendar(title: String, description: String?, startDate: Date, endDate: Date, completion: ((_ success: Bool, _ error: NSError?) -> Void)? = nil) {
DispatchQueue.global(qos: .background).async {() -> Void in
let eventStore = EKEventStore()
eventStore.requestAccess(to: .event, completion: { (granted, error) in
if (granted) && (error == nil) {
let event = EKEvent(eventStore: eventStore)
event.title = title
event.startDate = startDate
event.endDate = endDate
event.notes = description
event.calendar = eventStore.defaultCalendarForNewEvents
do {
try eventStore.save(event, span: .thisEvent)
} catch let e as NSError {
completion?(false, e)
return
}
completion?(true, nil)
} else {
completion?(false, error as NSError?)
}
})
}
}
- 1. स्विफ्ट: (स्विफ्ट) वर्ण
- 2. स्विफ्ट
- 3. स्विफ्ट
- 4. स्विफ्ट
- 5. स्विफ्ट
- 6. स्विफ्ट
- 7. स्विफ्ट
- 8. स्विफ्ट
- 9. स्विफ्ट
- 10. स्विफ्ट
- 11. स्विफ्ट
- 12. स्विफ्ट
- 13. स्विफ्ट
- 14. स्विफ्ट
- 15. स्विफ्ट
- 16. स्विफ्ट
- 17. स्विफ्ट
- 18. स्विफ्ट
- 19. स्विफ्ट
- 20. स्विफ्ट
- 21. स्विफ्ट
- 22. स्विफ्ट
- 23. स्विफ्ट
- 24. स्विफ्ट
- 25. स्विफ्ट
- 26. स्विफ्ट
- 27. स्विफ्ट
- 28. स्विफ्ट
- 29. स्विफ्ट
स्विफ्ट 2.0 कार्यान्वयन जोड़ा गया: [यहां लिंक पर] (http: // stackoverflow।com/प्रश्न/246,249/प्रोग्राम के रूप में-एड-कस्टम-ईवेंट-इन-द-iphone-कैलेंडर/34,790,334 # 34,790,334) पता नहीं है जो आप आयात करना होगा के लिए – Dashrath