Найти iOS календари - PullRequest
       2

Найти iOS календари

1 голос
/ 29 мая 2011

У меня есть приложение, которое создает событие календаря программно, оно работает, и я только что сделал это, чтобы оно получало календари пользователей и отображало их в средстве выбора, но у меня есть утечка памяти.Вы видите это, потому что я попытался выпустить все ... Кроме того, моя главная проблема заключается в том, как сохранить его в тот календарь, который выбирает пользователь, [event setCalendar: calendararray];не работаетCalendararray - это EKCalendar * calendararray, и я устанавливаю для него выбранный пользователем календарь.Почему это не работает ????Как мне заставить это работать ...

календарь .m

 #import "calendar.h"


 @implementation calendar
 @synthesize delegate;
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];


EKEventStore *eventStore = [[EKEventStore alloc] init];

/* These are the calendar types an iOS Device can have. Please note
 that the "type" property of an object of type EKCalendar
 is of type EKCalendarType. The values in the "CalendarTypes"
 array reflect the exact same values in the EKCalendarType
 enumeration, but as NSString values */
NSArray *calendarTypes = [NSArray arrayWithObjects:
                          @"Local",
                          @"CalDAV",
                          @"Exchange",
                          @"Subscription",
                          @"Birthday",
                          nil];

/* Go through the calendars one by one */
NSUInteger counter = 1;
for (EKCalendar *thisCalendar in eventStore.calendars){

    /* The title of the calendar */
    NSLog(@"Calendar %lu Title = %@", 
          (unsigned long)counter, thisCalendar.title);

Ответы [ 5 ]

3 голосов
/ 30 мая 2011

EKEventStore имеет свойство calendars , которое является NSArray экземпляров EKCalendar. Затем вы можете получить заголовок каждого EKCalendar и отобразить их все пользователю, чтобы они могли выбрать календарь, в который они хотят добавить новое событие.

1 голос
/ 05 июня 2011

Я не уверен, что весь код, который вы выложили, относится к одной и той же версии, но если вы скинули его вместе, я бы увидел по крайней мере следующую проблему:

Вы говорите

[event setCalendar:calendararray];

не работает.

Кажется, calendararray установлено в методе eventview.m calendararray:.

Это в свою очередь вызывается из calendar.m pickerView:didSelectRow:, где он берет выбранный объект из arrayColors.

В методе calendar.m viewDidLoad arrayColors инициализируется с названиями календарей пользователей, а не календарями. Таким образом, вы в конечном итоге даете EKEvent метод setCalendar: NSString вместо EKCalendar.

Не зная остальную часть вашей программы, в качестве исправления я бы попытался сохранить EKCalendar сами объекты в arrayColors.

Итак, в calendar.m попробуйте изменить

    [arrayColors addObject:thisCalendar.title];

в viewDidLoad до

    [arrayColors addObject:thisCalendar];

Затем измените pickerView:titleForRow: на

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
   EKEvent *event = [arrayColors objectAtIndex:row]
   return event.title;
}

Наконец, в eventview.m изменить calendararray:

- (void) calendararray:(EKCalendar *)array{
NSLog(@"calendarNameTextFieldStringFromTable %@", array);

calendararray = array;
calendarLabel.text = array.title;
calendarLabel.textColor = [UIColor brownColor];

}
1 голос
/ 30 мая 2011
NSLog(@"Calendar %lu Title = %@", (unsigned long)counter, thisCalendar.title);
NSString *title = [NSString stringWithFormat:@"Calendar %lu Title = %@", (unsigned long)counter, thisCalendar.title];
NSLog(title);
0 голосов
/ 05 июня 2011

Хорошо, я вижу, что вы хотите, вот мой путь:

EKEventStore *eventStore = [[EKEventStore alloc] init];

NSArray *calendarArray = [eventStore calendars]; //Here you get all the device calendars

EKEvent *event = [EKEvent eventWithEventStore:eventStore];
event.title = @"Event Title";

event.startDate = [[NSDate alloc] init]; event.endDate = [[NSDate alloc] initWithTimeInterval:816 sinceDate:event.startDate];

[event setCalendar:[calendarArray objectAtIndex:1]]; //here you set which calendar you want.. 
NSError *err;
[eventStore saveEvent:event span:EKSpanThisEvent error:&err];

Вы можете NSLog с циклом FOR итерировать «индекс», используя этот код ниже, чтобы узнать, какой из них вы хотите.

 NSLog(@"Cal name> %@. Index of cal> %i", [[calendarArray objectAtIndex:index] title], index);

Надеюсь, это поможет

0 голосов
/ 04 июня 2011

Попробуйте так:

#import "EventTestViewController.h"

#import "EventKit/EventKit.h"

@implementation EventTestViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    EKEventStore *eventStore = [[EKEventStore alloc] init];

    EKEvent *event  = [EKEvent eventWithEventStore:eventStore];
    event.title     = @"EVENT TITLE";

    event.startDate = [[NSDate alloc] init];
    event.endDate   = [[NSDate alloc] initWithTimeInterval:600 sinceDate:event.startDate];

    [event setCalendar:[eventStore defaultCalendarForNewEvents]];
    NSError *err;
    [eventStore saveEvent:event span:EKSpanThisEvent error:&err];       
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...