0

この一般的なコードを使用して、イベントを作成し、デフォルトのカレンダーに保存しようとしています。

EKEventStore *eventDB = [[EKEventStore alloc] init];
EKEvent *myEvent    = [EKEvent eventWithEventStore:eventDB];
myEvent.title       = titolo;
myEvent.startDate   = [NSDate date];
myEvent.calendar = [eventDB defaultCalendarForNewEvents];
myEvent.endDate     = data;
myEvent.allDay      = NO;
myEvent.notes       = note;

NSMutableArray *myAlarmsArray = [[NSMutableArray alloc] init];

EKAlarm *alarm1 = [EKAlarm alarmWithRelativeOffset:-300]; // 5 minutes
EKAlarm *alarm2 = [EKAlarm alarmWithRelativeOffset:-3600]; // 1 hour
EKAlarm *alarm3 = [EKAlarm alarmWithRelativeOffset:-86400]; // 1 day

[myAlarmsArray addObject:alarm1];
[myAlarmsArray addObject:alarm2];
[myAlarmsArray addObject:alarm3];

myEvent.alarms = myAlarmsArray;
[myAlarmsArray release];

NSError *err;
[eventDB saveEvent:myEvent span:EKSpanThisEvent error:&err];
if (err == noErr) {
    return YES;
} else {
    [Utils logError:err];
    return NO;
}

シミュレーターで問題が発生することは1つではありませんが、物理デバイスで実行すると、を呼び出すと無期限にハングします[eventDB saveEvent:span:error:]。iOS 4.2 /4.3とiOS5.0.1を使用してシミュレーターでテストし、実際のデバイスにiOS5.0.1をインストールしました。

私はここで何が間違っているのですか?それは私のせいですか、それともどこかでアプリを誤って設定しましたか?

ありがとうございました。

アップデート

Xcodeを介してアプリを一時停止したときの呼び出しのスタックトレースは次のとおりです。

#0  0x3622a060 in semaphore_wait_trap ()
#1  0x36f55450 in _dispatch_thread_semaphore_wait$VARIANT$up ()
#2  0x36f536b4 in _dispatch_barrier_sync_f_slow ()
#3  0x36f53632 in dispatch_barrier_sync_f$VARIANT$up ()
#4  0x36f5328e in dispatch_sync_f$VARIANT$up ()
#5  0x36f53910 in dispatch_sync$VARIANT$up ()
#6  0x31b46628 in -[EKEventStore _deleteObject:] ()
#7  0x31b48f28 in -[EKPersistentObject primitiveRemoveRelatedObject:forKey:] ()
#8  0x31b43972 in -[EKPersistentEvent _adjustForNewCalendar] ()
#9  0x31b43490 in -[EKPersistentEvent validate:] ()
#10 0x31b708a2 in __23-[EKEventStore commit:]_block_invoke_0 ()
#11 0x36f537ea in _dispatch_barrier_sync_f_invoke ()
#12 0x36f5365a in dispatch_barrier_sync_f$VARIANT$up ()
#13 0x36f5328e in dispatch_sync_f$VARIANT$up ()
#14 0x36f53910 in dispatch_sync$VARIANT$up ()
#15 0x31b43200 in -[EKEventStore commit:] ()
#16 0x31b3f254 in -[EKEventStore saveEvent:span:commit:error:] ()
#17 0x31b3f11a in -[EKEventStore saveEvent:span:error:] ()
#18 0x00009018 in +[Utils creaEventoDaCalendario:note:data:] at /myPrivatePath/Utils.m:123
#19 0x0000c144 in -[PotenzialitaController(hidden) salvaEvento] ()
#20 0x34279434 in -[NSObject performSelector:withObject:withObject:] ()
#21 0x376e39ea in -[UIApplication sendAction:to:from:forEvent:] ()
#22 0x377a93ce in -[UIBarButtonItem(UIInternal) _sendAction:withEvent:] ()
#23 0x34279434 in -[NSObject performSelector:withObject:withObject:] ()
#24 0x376e39ea in -[UIApplication sendAction:to:from:forEvent:] ()
#25 0x376e39a6 in -[UIApplication sendAction:toTarget:fromSender:forEvent:] ()
#26 0x376e3984 in -[UIControl sendAction:to:forEvent:] ()
#27 0x376e36f4 in -[UIControl(Internal) _sendActionsForEvents:withEvent:] ()
#28 0x376e402c in -[UIControl touchesEnded:withEvent:] ()
#29 0x376e250e in -[UIWindow _sendTouchesForEvent:] ()
#30 0x376e1f00 in -[UIWindow sendEvent:] ()
#31 0x376c84ec in -[UIApplication sendEvent:] ()
#32 0x376c7d2c in _UIApplicationHandleEvent ()
#33 0x30afadf2 in PurpleEventCallback ()
#34 0x342f3552 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#35 0x342f34f4 in __CFRunLoopDoSource1 ()
#36 0x342f2342 in __CFRunLoopRun ()
#37 0x342754dc in CFRunLoopRunSpecific ()
#38 0x342753a4 in CFRunLoopRunInMode ()
#39 0x30af9fcc in GSEventRunModal ()
#40 0x376f6742 in UIApplicationMain ()
#41 0x00002cbc in main at /myPrivatePath/main.m:14

ステップ#17で、ハングする呼び出しがあります。

4

1 に答える 1

0

これはiOS5のバグが原因であると思われ、イベントに複数のアラームを設定するとアプリがクラッシュします。単一のアラームを使用すると、すべてが正常に機能します。

私はiOS6でこれを試していなかったので、Appleが問題を解決したかどうかはわかりません。

于 2012-07-09T14:19:54.613 に答える