【问题标题】:Delete Google Calendar event删除 Google 日历活动
【发布时间】:2018-07-09 11:19:09
【问题描述】:

如何从我的应用程序中删除特定的谷歌日历活动? 这是我必须获取谷歌日历事件的代码。 如果我点击表格视图单元格菜单,当我点击删除时,我会在表格视图上显示所有事件,并显示删除选项,然后应删除所选事件。

    func fetchEvents() {
        let query = GTLRCalendarQuery_EventsList.query(withCalendarId: "primary")
        query.maxResults = 10
        query.timeMin = GTLRDateTime(date: Date())
        query.singleEvents = true
        query.orderBy = kGTLRCalendarOrderByStartTime
        service.executeQuery(
            query,
            delegate: self,
            didFinish: #selector(displayResultWithTicket(ticket:finishedWithObject:error:)))
    }

在 UITextView 中显示开始日期和事件摘要

    @objc func displayResultWithTicket(
        ticket: GTLRServiceTicket,
        finishedWithObject response : GTLRCalendar_Events,
        error : NSError?) {

        if let error = error {
            showAlert(title: "Error", message: error.localizedDescription)
            return
        }

        var outputText = ""
        if let events = response.items, !events.isEmpty {
            for event in events {
                let start = event.start!.dateTime ?? event.start!.date!
                let startString = DateFormatter.localizedString(
                    from: start.date,
                    dateStyle: .short,
                    timeStyle: .short)
                eventDateArray.add(start.date)


                let dataDic = ["fullTimeAndDate":startString , "tag":"red", "eventType":event.summary!] // MonthDataModel(fullTimeAndDate: seprated[1], tag: "red", appointmentType: event.eTag)
                eventArray.add(dataDic)

                outputText += "\(startString) - \(event.summary!)\n"
                print("Output ", startString , event )
            }
            UserDefaults.standard.set(eventDateArray, forKey: "EventDataArray")
            UserDefaults.standard.set(NSKeyedArchiver.archivedData(withRootObject: eventArray), forKey: "EventArray")


            UserDefaults.standard.synchronize()
        } else
        {
            outputText = "No upcoming events found."
        }
        print("Output Text",outputText)
        showAlert(title: "Event Sync Succesfully!", message:"")
    }

请指导我,我也是 swift 和堆栈溢出的新手。

我正在尝试使用此代码删除日历事件,但没有成功。

  func deleteGoogleCalendarEvent() {

        let query = GTLRCalendarQuery_EventsDelete.query(withCalendarId: "primary", eventId: self.del_Event_id)

        service.executeQuery(query, GTLRServiceCompletionHandler: nil)
    }

【问题讨论】:

    标签: google-calendar-api swift4


    【解决方案1】:

    您将在需要提供calendarIdeventId 的地方使用Events: delete 来执行此操作。对于 Swift 中的代码实现,请遵循以下指南:

    Swift Google Calendar: Delete an Event

    func chilkatTest() {
        let rest = CkoRest()
        var success: Bool
    
        //   Provide a previously obtained OAuth2 access token.
        let oauth2 = CkoOAuth2()
        oauth2.AccessToken = "OAUTH2_ACCESS_TOKEN"
        rest.SetAuthOAuth2(oauth2)
    
        success = rest.Connect("www.googleapis.com", port: 443, tls: true, autoReconnect: true)
        if success != true {
            print("\(rest.LastErrorText)")
            return
        }
    
        let sbResponse = CkoStringBuilder()
        success = rest.FullRequestNoBodySb("DELETE", uriPath: "/calendar/v3/calendars/support@chilkatcloud.com/events/1p7fb5vob7vm57fepk4p1teft9", sb: sbResponse)
        if success != true {
            print("\(rest.LastErrorText)")
            return
        }
    
        if rest.ResponseStatusCode.integerValue != 204 {
            print("Received error response code: \(rest.ResponseStatusCode.integerValue)")
            print("Response body:")
            print("\(sbResponse.GetAsString())")
            return
        }
    
        print("Example Completed.")
    
    }
    

    【讨论】:

    • 感谢您的宝贵时间,但我找到了解决方案。
    • 发布您的解决方案。
    • 如果可能的话,您能否提出代码,如何从谷歌日历中获取事件,我在获取时遇到了问题。 @tdakus
    • @tdakus 在这里等待您的回复
    • @AnilkumariOSdeveloper 你有问题吗
    【解决方案2】:

    哇!!我得到了它。只需要对删除函数调用做一些修改,对删除函数的选择器函数做一些工作

       func deleteGoogleCalendarEvent() {
    
            let query = GTLRCalendarQuery_EventsDelete.query(withCalendarId: "primary", eventId: self.del_Event_id)
    
            service.executeQuery(query, delegate: self, didFinish: #selector(deleteResultWithTicket(ticket:finishedDelete:error:)))
        }
    

    这里是选择器(deleteResultWithTicket)

    @objc func deleteResultWithTicket(
            ticket: GTLRServiceTicket,
            finishedDelete response: GTLRCalendarQuery_AclDelete,
            error : NSError?) {
    
            if error != nil {
                print(error?.localizedDescription!)
                return
            }
            self.fetchGoogleCalendarEvents()
        }
    

    如果你想对谷歌日历事件进行写操作,请确保范围,你必须设置范围 = [kGTLRAuthScopeCalendar]。

    【讨论】:

    • 您使用的是哪个 SDK/POD?我没有看到任何适当的文档。
    • 已使用 GoogleAPIClientForREST pod。 @JamshedAlam
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多