Ich habe ein Problem, bei dem entweder der Erinnerungskalender oder der Ereigniskalender, je nachdem, welches Popup zuerst angezeigt wird, mehrere Kalender erstellt und keine der Ereignisse/Erinnerungen speichert. Ich habe die Eigenschaften im Plist eingestellt. Unten ist der Code, den ich Zugriff auf die Ereignisse und Erinnerungen verlangen bin mit:Xamarin iOS EventStore.Getcalendars Rückgabe 0
var calendarEvent = await ANApi.FetchCalendarInfoAsync(AppCore.CurrentAppInfo.AppId);
calendarEvent.Count();
foreach (var calEvent in calendarEvent.ToList())
{
if (calEvent.Type == 1)
{
AppEvent.Current.EventStore.RequestAccess(EKEntityType.Event, (bool granted, NSError err) =>
{
if (granted)
{
lock (_lock)
{
CreateCalendar(EKEntityType.Event);
CreateEvent(calEvent);
}
}
});
}
else
{
AppEvent.Current.EventStore.RequestAccess(EKEntityType.Reminder, (bool remGranted, NSError remErr) =>
{
if (remGranted)
{
lock (_lock)
{
CreateCalendar(EKEntityType.Reminder);
CreateReminder(calEvent);
}
}
});
}
}
Der Code funktioniert gut, wenn ich nur Ereignisse oder Erinnerungen empfangen, aber da ich beiden Ereignisse und Erinnerungen empfängt, wird es andernfalls zu Erstelle meine Kalender richtig.
Dies ist, wie ich die Kalender erschaffe:
public void CreateCalendar(EKEntityType type)
{
bool calExists = false;
var appName = NSBundle.MainBundle.ObjectForInfoDictionary("CFBundleDisplayName");
//This returns 0 calendars, depending on which event's request was displayed first.
EKCalendar[] calendars = AppEvent.Current.EventStore.GetCalendars(type);
foreach (EKCalendar cal in calendars)
{
if (type == EKEntityType.Event)
{
if (PersistentLayer.Instance.GetString(Constant.CALENDAR_ID) == null)
calExists = false;
else if (cal.CalendarIdentifier == PersistentLayer.Instance.GetString(Constant.CALENDAR_ID))
calExists = true;
}
else
{
if (PersistentLayer.Instance.GetString(Constant.REMINDER_CALENDAR_ID) == null)
calExists = false;
else if (cal.CalendarIdentifier == PersistentLayer.Instance.GetString(Constant.REMINDER_CALENDAR_ID))
calExists = true;
}
}
//Create a Calendar based on the App's name. If name cannot be found use App Calendar
if (!calExists)
{
EKCalendar calendar = EKCalendar.Create(type, AppEvent.Current.EventStore);
if (appName != null)
calendar.Title = appName.ToString();
else
calendar.Title = "App";
EKSource localSource = null;
foreach (EKSource source in AppEvent.Current.EventStore.Sources)
{
if (source.SourceType == EKSourceType.CalDav)
{
localSource = source;
break;
}
}
if (localSource == null)
return;
calendar.Source = localSource;
calendar.CGColor = new CGColor(255, 255, 0);
NSError calError;
AppEvent.Current.EventStore.SaveCalendar(calendar, true, out calError);
if (calError != null)
{
this.SimpleAlert("Error saving Calender", calError.ToString(), "OK", null);
return;
}
//Store the calendar Id so we can use it when saving events
if (type == EKEntityType.Event)
PersistentLayer.Instance.Edit().PutString(Constant.CALENDAR_ID, calendar.CalendarIdentifier);
else
PersistentLayer.Instance.Edit().PutString(Constant.REMINDER_CALENDAR_ID, calendar.CalendarIdentifier);
}
}
Ich glaube, dass es irgendeine Art von Rennen Zustand geht, aber ich habe nicht in der Lage gewesen, um es herauszufinden. Ich habe mehrere Dinge ausprobiert, um es zum Laufen zu bringen, aber ich hatte keinen Erfolg.
Dank