- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用重复规则将事件添加到日历中 RRULE:FREQ=YEARLY;BYMONTH=6,7;BYDAY=1TH
因此根据此规则,事件应每年添加一次,即 6 月和 7 月的每个第一个星期四,直到我在我的项目中设置的过期日期。
在我的项目中,事件是根据重复规则创建的。使用以下代码,事件仅在 6 月的第一个星期四添加。为什么不在每个 7 月的第一个星期四也添加事件?
这里是.m文件代码
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self createEvent];
}
- (void)createEvent
{
EKEventStore *eventStore = [[EKEventStore alloc] init];
EKEvent *event = [EKEvent eventWithEventStore:eventStore];
event.title = @"testRecurrenceRule";
event.location = @"Dhaka";
[event setCalendar:[eventStore defaultCalendarForNewEvents]];
event.startDate = [self dateFromString:@"2013-06-18T21:00:00+06:00"];
event.endDate = [self dateFromString:@"2013-06-18T22:00:00+06:00"];
id recurrenceRule = [self recurrenceRuleForEvent];
if(recurrenceRule != nil)
[event addRecurrenceRule:recurrenceRule];
if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)])
{
// iOS 6 and later
[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (granted)
{
dispatch_async(dispatch_get_main_queue(), ^{
[self saveTheEvent:event eventStore:eventStore];
//[eventStore saveEvent:event span:EKSpanThisEvent error:error];
});
}
else
{
dispatch_async(dispatch_get_main_queue(), ^{
//do nothing
});
}
}];
}
else
{
[self saveTheEvent:event eventStore:eventStore];
}
textView.text = [NSString stringWithFormat:@"Event has been added with recurrence rule %@",recurrenceRule];
}
- (void)saveTheEvent:(EKEvent *)aEvent eventStore:(EKEventStore *)aStore
{
[aStore saveEvent:aEvent span:EKSpanThisEvent error:NULL];
}
- (EKRecurrenceRule *)recurrenceRuleForEvent
{
//just creating a recurrence rule for RRULE:FREQ=YEARLY;BYMONTH=6,7;BYDAY=1TH
// setting the values directly for testing purpose.
//FREQ=YEARLY
EKRecurrenceFrequency recurrenceFrequency = EKRecurrenceFrequencyYearly;
NSInteger recurrenceInterval = 1;
EKRecurrenceEnd *endRecurrence = nil;
NSMutableArray *monthsOfTheYearArray = [NSMutableArray array];
NSMutableArray *daysOfTheWeekArray = [NSMutableArray array];
NSMutableArray *daysOfTheMonthArray = [NSMutableArray array];
NSMutableArray *weeksOfTheYearArray = [NSMutableArray array];
NSMutableArray *daysOfTheYearArray = [NSMutableArray array];
NSMutableArray *setPositionsArray = [NSMutableArray array];
//BYMONTH=6,7
[monthsOfTheYearArray addObject:[NSNumber numberWithInt:6]];
[monthsOfTheYearArray addObject:[NSNumber numberWithInt:7]];
//BYDAY=1TH
[daysOfTheWeekArray addObject:[EKRecurrenceDayOfWeek dayOfWeek:5 weekNumber:1]];
endRecurrence = [EKRecurrenceEnd recurrenceEndWithEndDate:[self dateFromString:@"2018-12-15T22:30+06:00"]];
EKRecurrenceRule *recurrence = [[EKRecurrenceRule alloc] initRecurrenceWithFrequency:recurrenceFrequency
interval:recurrenceInterval
daysOfTheWeek:daysOfTheWeekArray
daysOfTheMonth:daysOfTheMonthArray
monthsOfTheYear:monthsOfTheYearArray
weeksOfTheYear:weeksOfTheYearArray
daysOfTheYear:daysOfTheYearArray
setPositions:setPositionsArray
end:endRecurrence];
return recurrence;
}
- (NSDate *)dateFromString:(NSString *)string
{
//check if the date string in null
if ([string length] == 0)
return nil;
NSString *dateString = nil;
NSString *modifiedString = nil;
BOOL secSpotMissing = false;
NSRange range = [string rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@"T"]];
if (range.location != NSNotFound)
{
dateString = [string substringFromIndex:range.location];
range = [dateString rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@"+-Z"]];
if (range.location != NSNotFound)
{
//seperate the time portion of date string and checking second field is missing or not. like is it HH:mm or HH:mm:ss?
if ([[[dateString substringToIndex:range.location] componentsSeparatedByString:@":"] count] < 3)
secSpotMissing = true;
//seperate the time zone portion and checking is there any extra ':' on it. It should like -0600 not -06:00. If it has that extra ':', just replacing it here.
dateString = [dateString substringFromIndex:range.location];
if([dateString hasSuffix:@"Z"])
modifiedString = [dateString stringByReplacingOccurrencesOfString:@"Z" withString:@"+0000"];
else
modifiedString = [dateString stringByReplacingOccurrencesOfString:@":" withString:@""];
string = [string stringByReplacingOccurrencesOfString:dateString withString:modifiedString];
}
}
else
return nil;
// converting the date string according to it's format.
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
if (secSpotMissing)
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mmZZZ"];
else
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
return [dateFormatter dateFromString:string];
}
有人可以帮我解决这个问题吗?
最佳答案
这似乎是另一个问题的重复。基本上,根据“BYDAY”规则,YEARLY 频率的第一周表示一年中的第一周 - 而不是每个月的第一周。
@Shuvo,我没读过rfc。但这是 Apple 文档 EKRecurrenceDayOfWeek .
The EKRecurrenceDayOfWeek class represents a day of the week for use with an EKRecurrenceRule object. A day of the week can optionally have a week number, indicating a specific day in the recurrence rule’s frequency. For example, a day of the week with a day value of Tuesday and a week number of 2 would represent the second Tuesday of every month in a monthly recurrence rule, and the second Tuesday of every year in a yearly recurrence rule.
当您说“第一个星期四”时,这是正确的 - 除了每年的上下文,它是一年中的第一个星期四。
关于ios - 未根据给定的 EKRecurrenceRule 添加 EKEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18365521/
EKEvent 从我的应用程序以编程方式创建,当我获取在 iPhone 日历中创建的 EKEvent 时,我如何识别由 iPhone 日历或我创建的两个 (EKEvent) 事件 最佳答案 您可以做很
我将周期性事件 (EKEvent) 写入日历中。如何获取并修改特定日期内的这些重复事件之一? 事件是通过以下代码创建的: + (void) writeTestEvent{ EKEventSto
我正在使用 Xcode 6.0.1,使用 Event Kit 制作测试应用。以下代码成功地填充了每个事件的标题,但即使 hasNotes 属性返回 YES,其注释也会返回为 (null)。而且,我可以
我正在尝试创建一个具有查看日历事件的功能的应用程序。我能够读取所有属性,但EKAlarm遇到问题。当我在for循环中执行NSLog时,它确认它应该达到15分钟的警报日志,但它正在传递。 for (in
我正在 iOS5 中开发 EKEvent。我可以添加、删除、列出事件,但现在的问题是当我尝试编辑现有事件时,“完成”按钮会产生问题。它不会进入 eventEditViewController: 方法。
我的应用程序中有一个功能可以将事件添加到日历中,该过程涉及解析日期的字符串表示形式(使用夏令时调整,并将 EKEvent startDate 设置为它,这里是一个片段: let eventStore
在我的应用程序中,我正在向设备日历添加一个事件。我正在这样做 if ([db.saveCalenderSettings isEqualToNumber:[NSNumber numberWithBool
我正在开发一个日历应用程序,我们可以在其中查看 iCal 中的所有事件。在应用程序中,我们可以选择取消事件。如果事件被取消,那么我们需要更改事件的状态。但是 EKEvent 的状态属性是只读的,所以当
我正在尝试为项目制作事件同步功能。我需要与远程服务器同步事件。 假设我在设备 A 中安装了该应用。 如果我登录到另一台设备让 B,那么从 A 同步的事件也应该出现在设备 B 中,并且 B 的事件也应该
我们如何从 iPhone 日历事件中获取旅行时间。 我指的是我们将在创建事件时输入的旅行时间。 我将使用“EKEventStore”获取所有事件详细信息。 最佳答案 毕竟我得到了解决方案。 EKEve
NSDictionary *d = (NSDictionary *) [arrGarden objectAtIndex:0]; int intarrCount=0; NSString
我遇到了问题。我需要知道我的 EventStore 中的事件何时更改,因此对于这种情况,我使用 EKEventStoreChangedNotification 但此通知返回给我的是 userInfo
我一直在测试此代码以将日历添加到 IOS Cal 应用程序,并将一些事件添加到应用程序中的特定日历。 我有一个装有 IOS7 的 Ipad,禁用了 iCloud。 第一个问题是当我创建日历时,我在 i
我在我的应用程序中使用 Kal 日历(希望它不会改变太多)但我从中获得了一个 EKEvent 对象,具体取决于用户在日历上的选择。 无论如何,如何编辑和删除已经存在的事件?即我收到的 EKEvent?
我在 Xcode 9、iOS11 上保存 EKEvent 时遇到此 NSInternalInconsistencyException 错误。 do { try eventStore.save
我想创建一个 EKEventStore 对象,并在不同的类中使用它,我可以在每个类中使用不同的实例吗?或者我必须使用单例模式创建一个 EKEventStore 实例? Apple 文档建议创建一个实例
在我的应用程序中,我显示 EKEvents 列表,我想在 UITableView 中显示一个月的所有事件,每个部分包含各自的日期。嗯,这可行,我得到了我需要的所有数据,但获取速度非常慢。 问题在于事件
背景信息 我有一个包含 NSDate 对象的类,该对象用作 EKEvent 的日期。 EKEvent 添加到日历中,有时会设置 EKRecurrenceRule,其日期比事件的实际日期早 x 天。例如
一种解决方案可能是: 创建一个新模型 EKEventExt 并在它们之间添加一对一关系,我不确定它是否可行,因为 EKEventExt 存储在我的模型中sqlite 和 EKEvent 存储在 eve
我正在为日历设置事件。该代码可以正常工作,但我会检查我的设备日历上是否设置了事件。它没有显示任何内容。我在 ios6 中这样做,当我在 ios5 中这样做时,它工作正常。 最佳答案 这对我有用,你也可
我是一名优秀的程序员,十分优秀!