Xamarin.iOS&Eventkit
问题描述:
我有一个问题,通过eventfromIdentifier从Eventstore获取日历条目。保存一个事件工作正常,但是当我尝试从EventStore检索事件时,它返回null。我在stackoverflow上检查了其他问题,没有人修复它。我希望你能帮忙。Xamarin.iOS&Eventkit
功能保存日历条目,工作正常。我得到UUID并将其保存到本地数据库。
private void createOneCalendarEntry(VorstellungEventArgs e) {
EKEvent newEvent = EKEvent.FromStore(CalendarHelper.Current.EventStore);
newEvent.StartDate = DateHelper.DateTimeToNSDate(e.Vorstellung.Beginn ?? DateTime.Now);
DateTime StartTime = e.Vorstellung.Beginn ?? DateTime.MinValue;
var Duration = e.Vorstellung.Dauer ?? 90;
newEvent.EndDate = DateHelper.DateTimeToNSDate(StartTime.AddMinutes(Duration));
newEvent.Title = e.Vorstellung.PublikationsTitel;
newEvent.Notes = e.Vorstellung.ZeitUndOrtString;
newEvent.Calendar = CalendarHelper.Current.EventStore.DefaultCalendarForNewEvents;
NSError a;
try
{ // Save Note to Calendar to get UUID
CalendarHelper.Current.EventStore.SaveEvent(newEvent, EKSpan.ThisEvent, true, out a);
if (a != null)
{
new UIAlertView("Err Saving Event", a.ToString(), null, "ok", null).Show();
return;
}
else
{ // Test: Show UUID
new UIAlertView(newEvent.UUID, "wurden zum Kalendar hinzugefügt", null, "ok", null).Show();
ViewModel.DataManager.InsertCalID(e.Vorstellung.Id, e.Vorstellung.FilmId, newEvent.UUID);
}
}
catch
{
new UIAlertView("Fehler", "Kalendareinträge wurden nicht erstellt", null, "ok", null).Show();
}
finally
{
}
}
这里来的函数调用条目并删除它们。 “ViewModel.DataManager.getCalID(e.Vorstellung.Id,e.Vorstellung.FilmId)”给了我创建好的UUID。
private void deleteEventfromCalandar(VorstellungEventArgs e)
{
NSError a;
// Get UUID from local Database an get Event from UUID THIS RETURNS ALWAYS NULL
EKEvent EventToDelete = CalendarHelper.Current.EventStore.EventFromIdentifier(ViewModel.DataManager.getCalID(e.Vorstellung.Id, e.Vorstellung.FilmId));
// Delete current event from calendar
CalendarHelper.Current.EventStore.RemoveEvent(EventToDelete, EKSpan.ThisEvent,true, out a);
new UIAlertView("Erfolg", "Kalendareintrag mit "+EventToDelete.UUID+" wurde gelöscht", null, "ok", null).Show();
}
这里Eventstore,从Xamarin doku
class CalendarHelper
{
public static CalendarHelper Current
{
get { return current; }
}
private static CalendarHelper current;
public EKEventStore EventStore
{
get { return eventStore; }
}
protected EKEventStore eventStore;
static CalendarHelper()
{
current = new CalendarHelper();
}
protected CalendarHelper()
{
eventStore = new EKEventStore();
}
}
而且是我的应用程序复制有权日历
CalendarHelper.Current.EventStore.RequestAccess(EKEntityType.Event,
(bool granted, NSError e) =>
{
if (granted)
{
}
else
{
new UIAlertView("Access Denied", "user Denied Access to Calendar Data", null, "ok", null).Show();
}
});
答
我定了!问题是我保存了错误的标识符。有两个不同的标识符,“UUID”和“Eventidentifier”。随着Eventidentifier我的代码工作正常。
ViewModel.DataManager.InsertCalID(e.Vorstellung.Id, e.Vorstellung.FilmId, newEvent.Eventidentifier);
和
new UIAlertView("Erfolg", "Kalendareintrag mit "+EventToDelete.Eventidentifier +" wurde gelöscht", null, "ok", null).Show();
}