【问题标题】:Xamarin.iOS & EventkitXamarin.iOS 和 Eventkit
【发布时间】:2015-08-28 08:47:40
【问题描述】:

我无法通过 eventfromIdentifier 从 Eventstore 获取日历条目。保存事件工作正常,但是当我尝试从 EventStore 检索事件时,它返回 null。我在stackoverflow上检查了其他问题,没有人修复它。我希望你能帮忙。

保存日历条目的功能,工作正常。我得到 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();
                }
            });

【问题讨论】:

    标签: c# xamarin eventkit


    【解决方案1】:

    我修好了!问题是我保存了错误的标识符。有两个不同的标识符,“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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多