批量保存 EKEvents 到 Google 日历导致随机事件丢失

2023-12-13

我有大量活动想要批量保存到日历中。用户选择哪个日历。他们可以选择导出到 iCloud 日历或 Google 日历。导出到 iCloud 日历时,一切都运行顺利。没问题。然而,当导出到 Google 日历时,我遇到了一些奇怪的问题。要保存的事件数量约为 60-90 个事件。我使用下面提供的功能在后台导出日历事件。该操作运行良好,并且在记录期间包含所有事件,并且在迭代事件时它们都收到了事件标识符。 然而,在任何情况下,大约有 5-10 个事件没有同步到 Google 日历,也没有显示在手机日历上。对于每个导出,未显示的事件都不同,因此不是事件本身有问题。我尝试了很多不同的方法,但没有成功。 我尝试过的: - 删除了后台操作。 - 删除了日历状态回调。 - 将函数移到闭包之外并直接调用它。 - 删除了@autorelease。 - 检查 EKEventStore 和 EKCalendar 在整个操作过程中是否处于活动状态。

你们有人知道对此有一个很好的解释吗?我检查了谷歌是否对保存有任何限制,但根据文档,在短时间内导入 10 000 多个事件时,日历可能会变成只读,而我什至没有接近这一点。

我希望得到任何反馈。这真让我抓狂。正如我之前所说,iCloud 导出效果很好。

这是我的导出代码:

import UIKit
import EventKit

struct Activity {
   var title : String!
   var startDate : NSDate!
   var endDate : NSDate!
}

class CalendarManager: NSObject {

class func saveToCalendarInBackground(activities: [Activity], eventStore: EKEventStore, calendar: EKCalendar, calendarStatus: (status: String!, progress: Float!) -> (), completion:(success: Bool!, error: NSError!) -> ()) -> Void {

    //Run the operations on another thread (not main), but do UI updates on the main thread
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {

        if activities.count > 0 {

            var formatter = NSDateFormatter()

            autoreleasepool {

                //Save duties to calendar
                for (index, activity) in enumerate(activities) {

                    //Update status
                    let progress = Float(index + 1) / Float(activities.count)

                    //Return callbacks on main thread
                    dispatch_sync(dispatch_get_main_queue(), {
                        calendarStatus(status: "Saving \(index+1) of \(activities.count)", progress: progress)
                    })

                    //Save activity
                    var event = EKEvent(eventStore: eventStore)
                    event.calendar = calendar
                    event.title = activity.title
                    event.startDate = activity.startDate
                    event.endDate = activity.endDate

                    var saveEventError : NSError?

                    if eventStore.saveEvent(event, span: EKSpanThisEvent, commit: false, error: &saveEventError) {

                        println("Activity saved. Commit needed.")

                    }
                    else {
                        println("Save error: \(saveEventError?.localizedDescription)")
                    }

                    //
                }

            }

            //Save all pending events
            var saveAllEventsError : NSError?

            if eventStore.commit(&saveAllEventsError) == true{
                println("Save all events complete!")

                //Return callbacks on main thread
                dispatch_async(dispatch_get_main_queue(), {
                    println("Calendar Save completion.")

                    calendarStatus(status: "Calendar save complete!", progress: 1)

                    completion(success: true, error: nil)
                })
                return
            }
            else {

                //Return callbacks on main thread
                dispatch_async(dispatch_get_main_queue(), {
                    completion(success: false, error: NSError(domain: "Calendar Save Error", code: 0, userInfo: [NSLocalizedFailureReasonErrorKey : "Error batch saving events: \(saveAllEventsError?.localizedDescription)"]))
                })

                println("Save all events ERROR: \(saveAllEventsError?.localizedDescription)")
                return
            }
        }
        else {

            //Return callbacks on main thread
            dispatch_async(dispatch_get_main_queue(), {
                completion(success: false, error: NSError(domain: "Calendar Save Error", code: 0, userInfo: [NSLocalizedFailureReasonErrorKey : "Found no events to save!"]))
            })
            return
        }
    })
}

}

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

批量保存 EKEvents 到 Google 日历导致随机事件丢失 的相关文章

  • ios 8 核心数据崩溃

    保存时 CoreData 发生崩溃 2014 09 16 09 51 58 273 My app 2678 105246 Terminating app due to uncaught exception NSInvalidArgument
  • 使用 JavaScript 从 URL 变量读取来加载不同的 CSS 样式表

    我试图在我的 WordPress 博客上使用两个不同的样式表 以便在通过 Web 访问页面时使用一个样式表 而在通过我们的 iOS 应用程序访问博客内容时使用另一个样式表 现在 我们将 app true 附加到来自 iOS 应用程序的 UR
  • 从 Plist 中存储和检索 [重复]

    这个问题在这里已经有答案了 可能的重复 iOS 在 plist 文件中存储两个 NSMutableArray https stackoverflow com questions 6070568 ios store two nsmutable
  • iOS Swift 检测键盘事件

    我能以某种方式检测来自 iOS 键盘的事件吗 我想检测此类事件UIViewController哪个没有UITextField或任何此类物体 我只有四个圆圈UIView我想在按下键盘上的按钮时将它们涂成不同的颜色 您没有任何对象可以从键盘获取
  • 如何在 Swift 中使用 CGFloat?

    var posinonY Float Float y Float pipeDown size height Float verticalPipeGap pipeDown position CGPointMake 0 0 Float posi
  • 新的 FUITableViewDataSource - 如何使用?雨燕3

    刚刚更新到较新的 FirebaseUI Pod 有些事情发生了变化 但其中最大的变化之一是 FUI 表视图的工作方式 我让它在旧版本上运行良好 但在下面遇到了困难 并且缺乏文档 示例 self dataSource FUITableView
  • 如何在 RestKit 中为同一类提供两条发布路线

    由于我无法弄清楚如何为同一个类设置两个不同的 POST 资源路径 因此我尝试手动创建 RKObjectLoader 请求 但它似乎不断发送 GET 请求而不是 POST 即使我已将方法设置为邮政 这是我的代码 User user User
  • iOS 解决方案仅当图像尚未使用 SDWebImage 缓存在内存中时才加载带有动画的图像

    我已经为这个问题苦苦挣扎了几天 以前我使用 AFNetworking 类别来加载和缓存图像 但它的回调中没有提供缓存类型 所以我过去常常在每个控制器中跟踪哪些图像已经加载 我浏览了 SDWebImage 它提供了我正在寻找的东西 SDIma
  • iOS:从非图像数据生成图像(Godus,如风景)

    所以看到图像后Godus http www kickstarter com projects 22cans project godus我想知道如何生成简单的 非交互式的 2D 图像 with 不同高度或层数的颜色不同就像下面的图片一样 我只
  • iOS 外部附件框架:如何获取特定 MFI 设备的协议字符串

    我正在编写一个 iOS 应用程序 用于与 mini mPlay Drumi MP18B 小型蓝牙扬声器 进行通信 据我所知 showBluetoothAccessoryPickerWithNameFilter仅显示协议字符串添加到 Info
  • 如何从 NSString 中删除十六进制字符

    我面临一个与字符串中的某些十六进制值相关的问题 我需要从字符串中删除十六进制字符 The problem is when i print object it prints as BLANK line And in debug mode it
  • 从 Core Data、iOS 获取最后插入的项目

    有没有办法获取核心数据数据库中最后插入的项目 这将返回最后插入的对象 setFetchLimit 1 和 setFetchOffset 所有条目数 1
  • 如何将十六进制数组转换为 UIImage?

    有几个与使用 P25mi 动态打印图像相关的未解答问题 没有一个得到公认的答案 下面有几个链接 如何将图像转换为位图代码以便在 iPhone 中进行蓝牙打印 https stackoverflow com questions 1383828
  • Swift 如何设计 UIWebView 在 Story Board 中自动调整全屏大小

    我在 StoryBoard 中设计了一个 320x500 的 UIWebView 但是当在 Iphone 6 Plus 模拟器中运行时 我想要这个 webview 全屏或随设备屏幕缩放 如何在故事板中制作它 我在 ViewDidLoad 中
  • 在模拟器中运行应用程序时删除本地通知的 iOS 权限警报

    我正在尝试编写验收测试KIF https github com kif framework KIF在一个很早就要求本地通知权限的应用程序上 不幸的是 由于 iOS 模拟器安全原因无法使用 KIF 自动接受 iOS 权限警报 https gi
  • 如何在 Xcode 4 中通过一个操作归档多个目标

    我有一个包含多个目标的项目 这些目标都适用于不同的 iOS 应用程序 例如 一个用于精简版的目标 另一个用于专业版的目标 我想立即构建并归档我的所有应用程序 目前 我对每个目标都有一个方案 我用它来独立归档每个应用程序 但现在我必须开始归档
  • Cognito/IAM 策略和 S3 获取对象

    我正在尝试将 S3 和 Cognito 集成到我的 iOS 应用程序中 但到目前为止尚未成功 我相信该错误与我针对 Auth 和 Unauth 用户的 IAM 策略有关 所以这是我的政策 Version 2012 10 17 Stateme
  • 如何在ios中以编程方式添加水平间距和垂直间距?

    我在 ios 8 中创建了一个应用程序 因为我有 4 个可垂直使用的标签 它应该在某些条件下更改位置 所以我已禁用自动布局并以编程方式设置约束 现在的问题是 我可以设置水平和垂直位置 宽度和高度的约束 但我找不到任何方法来添加标签之间的水平
  • 如何使用 afnetworking 在后台上传任务

    我正在尝试使用 AFNetworking 上传大文件 并在应用程序处于后台时继续上传 我可以很好地上传文件 但是当我尝试使用后台配置时 应用程序崩溃并显示以下堆栈跟踪 异常 EXC BAD ACCESS 代码 1 地址 0x8000001f
  • 当设置 setVisibleXRangeMaximum 时,iOS-Charts X 轴值无限重复

    我正在尝试绘制一个图表 其中 x 轴是TimeIntervalY 轴是power consumption 由于每天都会有数据 因此将有太多数据无法显示 因此 我想一次显示 5 个值 我通过设置实现了这一点self chart setVisi

随机推荐