iOS에서 로컬 캘린더를 만들려고합니다. EKEntityTypeEvent
에 대한 액세스를 요청하고 EKEventStore
(예, 내가 액세스 권한을 요청한 동일한 인스턴스)에서 캘린더를 만들고 EKSourceTypeLocal
을 찾은 다음 새 캘린더에 설정하십시오. saveCalendar:commit:error
(commit:YES
)을 호출하면 YES
이 반환되고 NSError
은 반환되지 않습니다. 결과 달력에는 calendarIdentifier
이 할당됩니다.iOS에서 로컬 캘린더를 만들 수 없음
하지만 iOS 캘린더 앱으로 전환하면 내 캘린더가 표시되지 않습니다. iOS 7 및 8 시뮬레이터 ("Reset Content and Settings ..."이후, iCloud가 구성되지 않은 경우) 및 iOS 8이 설치된 iCloud 연결 iPhone 5s에서 시도했습니다. 아무 것도 작동하지 않습니다!
내가 무엇을 놓쳤는가?
@import EventKit;
#import "ViewController.h"
@interface ViewController()
@property (weak, nonatomic) IBOutlet UILabel *resultLabel;
@property (nonatomic, assign) NSUInteger calendarCount;
@property (nonatomic, strong) EKEventStore *eventStore;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.resultLabel.text = @"";
self.eventStore = [[EKEventStore alloc] init];
}
- (IBAction)userDidTapCreateCalendar:(id)sender {
EKAuthorizationStatus status = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];
if (status == EKAuthorizationStatusNotDetermined) {
__weak typeof(self) weakSelf = self;
[self.eventStore requestAccessToEntityType:EKEntityTypeEvent
completion:^(BOOL granted, NSError *error) {
if (granted) {
[weakSelf createCalendar];
} else {
weakSelf.resultLabel.text = @"If you don't grant me access, I've got no hope!";
}
}];
} else if (status == EKAuthorizationStatusAuthorized) {
[self createCalendar];
} else {
self.resultLabel.text = @"Access denied previously, go fix it in Settings.";
}
}
- (void)createCalendar
{
EKCalendar *calendar = [EKCalendar calendarForEntityType:EKEntityMaskEvent eventStore:self.eventStore];
calendar.title = [NSString stringWithFormat:@"Calendar %0lu", (unsigned long)++self.calendarCount];
[self.eventStore.sources enumerateObjectsUsingBlock:^(EKSource *source, NSUInteger idx, BOOL *stop) {
if (source.sourceType == EKSourceTypeLocal) {
calendar.source = source;
*stop = YES;
}
}];
NSError *error = nil;
BOOL success = [self.eventStore saveCalendar:calendar commit:YES error:&error];
if (success && error == nil) {
self.resultLabel.text = [NSString stringWithFormat:@"Created \"Calendar %0lu\" with id %@",
(unsigned long)self.calendarCount, calendar.calendarIdentifier];
} else {
self.resultLabel.text = [NSString stringWithFormat:@"Error: %@", error];
}
}
@end
물론 그렇습니다. 이것은 심지어 이것이 컴파일된다는 믿음을 사로 잡습니다. _ 역동적 인 언어가 너무 멋지다 _ _ –