gpt4 book ai didi

ios - EKEventStore 导致 SpringBoard 崩溃

转载 作者:行者123 更新时间:2023-11-28 22:10:30 25 4
gpt4 key购买 nike

我构建了一个从日历中获取 ekevents 的应用程序(通过 EKEventStore predicateForEventsWithStartDate:endDate:calendars:)并将应用程序事件与日历同步(通过 EKEventStore saveEvent:span:commit:error: )。

我使用了对 EKEventStore 的静态引用,并确保 EKEventStore 不会被我的不同进程同时访问。

应用程序有时会因 IOS7 上的 Springboard 崩溃而终止。这是崩溃的回溯。

Last Exception Backtrace:
0 CoreFoundation 0x18625e950 __exceptionPreprocess + 132
1 libobjc.A.dylib 0x1927641fc objc_exception_throw + 60
2 CoreFoundation 0x18625e810 +[NSException raise:format:arguments:] + 116
3 Foundation 0x186d96db4 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 112
4 EventKit 0x186adab84 -[EKEventStore _addFetchedObjectWithID:] + 240
5 EventKit 0x186adaa64 __78-[EKEventStore registerFetchedObjectWithID:withDefaultLoadedProperties:inSet:]_block_invoke + 96
6 libdispatch.dylib 0x192d3bfd4 _dispatch_client_callout + 16
7 libdispatch.dylib 0x192d41c84 _dispatch_barrier_sync_f_invoke + 48
8 EventKit 0x186ada990 -[EKEventStore registerFetchedObjectWithID:withDefaultLoadedProperties:inSet:] + 148
9 EventKit 0x186ae1458 __41-[EKPredicateSearch startWithCompletion:]_block_invoke + 796
10 EventKit 0x186ae1050 -[EKDaemonConnection _processReplyWithID:data:finished:] + 220
11 EventKit 0x186ae0f5c CADReceiveReply + 136
12 EventKit 0x186ae0eac _XReply + 124
13 EventKit 0x186ae0e04 ClientCallbacks_server + 100
14 libdispatch.dylib 0x192d3fae8 dispatch_mig_server + 352
15 EventKit 0x186ae0d6c __43-[EKDaemonConnection initWithOptions:path:]_block_invoke16 + 44
16 libdispatch.dylib 0x192d3bfd4 _dispatch_client_callout + 16
17 libdispatch.dylib 0x192d3db90 _dispatch_source_invoke + 500
18 libdispatch.dylib 0x192d430f4 _dispatch_root_queue_drain + 104
19 libdispatch.dylib 0x192d434fc _dispatch_worker_thread2 + 76
20 libsystem_pthread.dylib 0x192ed16bc _pthread_wqthread + 356
21 libsystem_pthread.dylib 0x192ed154c start_wqthread + 4

这是我初始化 ekeventstore 的代码:

+ (EKEventStore *) sharedStore {
static EKEventStore *sharedEventStore;

if (sharedEventStore == nil) {
sharedEventStore = [[EKEventStore alloc] init];
[sharedEventStore requestAccessToEntityType: EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
}];
[sharedEventStore reset];
}

return sharedEventStore;
}

获取事件的代码:

NSPredicate *predicate = [[CalendarHelper sharedStore] predicateForEventsWithStartDate:startDate
endDate:endDate
calendars:[[showableCalendars copy] autorelease]];
NSArray *result = [[CalendarHelper sharedStore] eventsMatchingPredicate:predicate];

并更新/创建事件:

EKEvent *event = [[CalendarHelper sharedStore] eventWithIdentifier:eventId];
if(event != nil) {
event.title = title;
event.startDate = startDate;
event.endDate = endDate;
NSLog(@"Updating...");
NSLog(@"+++ %@", event.eventIdentifier);

[[CalendarHelper sharedStore] saveEvent:event span:EKSpanThisEvent commit:commit error:nil];
NSLog(@"Updated.");
}
else {
NSLog(@"No event, no update");
}

有什么线索吗?

最佳答案

请检查您的 ios 版本。我在使用 iOS 7.0.2 时遇到过类似的崩溃,如果不是,请尝试以下代码

这个错误的原因似乎与我们试图在我们的应用程序中获取多少事件有关。查看 apple 的错误报告 (15424747)。

当我们的应用程序确实对具有大范围日期的 eventStore 进行谓词时,似乎会引入此错误。

代码如下:

NSPredicate *predicate = [self.eventStore predicateForEventsWithStartDate:startDate     endDate:endDate calendars:nil]; 

//我们使用 NSSortDescriptor 进行排序

if (!self.masterListSortDescriptor)
{
self.masterListSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"startDate" ascending:YES];
}

NSArray *result = [[self.eventStore eventsMatchingPredicate:predicate]
sortedArrayUsingDescriptors:@[self.masterListSortDescriptor]];

关于ios - EKEventStore 导致 SpringBoard 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23057212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com