iOS - 以编程方式将我们应用程序的自定义 URI 添加到存储在日历中的事件中

Posted

技术标签:

【中文标题】iOS - 以编程方式将我们应用程序的自定义 URI 添加到存储在日历中的事件中【英文标题】:iOS - Add custom URI of our app to the event stored in calendar programmatically 【发布时间】:2014-06-12 07:44:31 【问题描述】:

我有一个场景,我从我的应用程序中将事件添加到日历中。我的应用程序有一个自定义 url 方案 myapp://

我用来在日历中存储事件的代码是

-(void)addEventToCalender

NSDateComponents *components = [[NSDateComponents alloc]init];
[components setYear:2014];
[components setMonth:6];
[components setDay:15];
[components setHour:10];
[components setMinute:15];

NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *eventDateAndTime = [cal dateFromComponents:components];
NSLog(@"Event Date and Time : %@",eventDateAndTime);

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

EKEvent *event = [EKEvent eventWithEventStore:store];

event.title = @"ttrrpp Trip";
event.notes = @"Go to application myapp://";
event.startDate = eventDateAndTime;
event.endDate = [[NSDate alloc]initWithTimeInterval:600 sinceDate:eventDateAndTime];

[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error)
 
     if (granted)
     
         [event setCalendar:[store defaultCalendarForNewEvents]];
         NSError *err = nil;
         [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err];
         NSString *savedEventId = event.eventIdentifier;
         NSLog(@"Saved Event ID : %@",savedEventId);

     
     else
     
         UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"ttrrpp" message:@"You have denied to provide access to calender. No events will be added." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
         [alert show];
     
 ];

事件已添加到日历中,但我想将我的应用程序的 url 传递给注释,以便在单击事件注释中的链接时打开我的应用程序。请帮助我。 提前致谢。

【问题讨论】:

【参考方案1】:

你很亲密;-)。假设您已经在 .plist 中定义了自定义 URL 方案,请将“主机”和“路径”添加到放置在 event.notes 中的自定义 URL 方案中。 (例如 myapp://myhost/mypath)然后类似...

-(BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url  - deprecated
-(BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 

    if (!url) 
        return NO;
    

    if([[url host] isEqualToString:@"myhost"])
    
        //can also check [url path] if you want to
        //do whatever
    

    return YES;

PS:不推荐使用的方法适用于 ios6/7,还没有尝试过新方法。

【讨论】:

以上是关于iOS - 以编程方式将我们应用程序的自定义 URI 添加到存储在日历中的事件中的主要内容,如果未能解决你的问题,请参考以下文章

如何在标准 UITableViewCell 中以编程方式自动布局右侧的自定义 UIButton。

我们可以以编程方式从我们的应用程序打开/关闭 hdmi 设置吗

如何以编程方式将值保存到 JIRA 中的自定义字段中?

以编程方式将 UIButton 添加到带有情节提要的自定义 ViewController

iOS 编程:viewDidAppear 中的自定义按钮

更改以编程方式创建的自定义 inputAccessoryView 的高度?迅速 4