我希望在我的应用中获取特定日历中的所有活动.我在我的应用程序中创建了日历和测试事件(需要iOS 5.0或更高版本才能创建自定义日历).如果我在我的设备上运行该应用程序,然后检查系统日历应用程序,那么我的日历和我创建的事件将正确显示.
现在我希望我的应用程序从这个自定义日历中读取所有这些事件.我的事件是在startDate和endDate设置为NOW(NSDate分配时没有给出timeInterval)的情况下创建的.
NSDate *startDate = [NSDate dateWithTimeIntervalSinceNow:- 60 * 60 * 24 * (365 * 4 + 1)];
NSDate *endDate = [NSDate dateWithTimeIntervalSinceNow:60 * 60 * 24 * 365 * 25];
NSArray *calendarList = [NSArray arrayWithObjects:tmpCal, nil];
NSPredicate *datePredicate = [store predicateForEventsWithStartDate:startDate endDate:endDate calendars:calendarList];
NSArray *eventList = [store eventsMatchingPredicate:datePredicate];
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在指定结果事件所必须的时间间隔.您也可以看到,结束日期是从现在开始的25年,而开始日期是4年(闰年加一天).如果我以这种方式查询EKEventstore,我将获得之前添加的事件.如果我想将开始日期放回过去一天(或多天或几年),那么棘手的部分就会开始.然后,突然间,没有返回任何事件.
NSDate *startDate = [NSDate dateWithTimeIntervalSinceNow:- 60 * 60 * 24 * (365 * 4 + 2)];
Run Code Online (Sandbox Code Playgroud)
NSPredicate中NSTimeInterval的负值是否有限制?我没有发现任何记录的限制.我花了大约2个小时才发现为什么我没有参加任何活动(最初我想要的是过去5年和未来5年).这种好奇行为的原因是什么?任何的想法?
/编辑于04/11/2012在2012年3月31日和2012年4月20日创建一些具有开始日期的事件之后,似乎是按照从现在开始的间隔确定的日期提取事件受到间隔长度4的限制年份.在上面的给定代码中调整我的开始日期(通过设置前一天的开始日期),我能够在2012年3月31日之前获得事件,但不能更晚.删除此调整导致从03/31/2012和04/01/2012获取事件(但不是2012年4月20日的事件).经过第二次调整(20天后设置开始日期),我甚至得到了未来的事件.
我无法说明为什么会有这样的限制.可能存在一些内部计算会导致使用值存储溢出.只是一个猜测.
然后我前往Apple的例子.乍一看,我不想在Apple的EKEvent编程指南中使用给定的代码.它看起来并不像我的那么小和可爱,但在遇到这么多麻烦之后我就试了一下.
CFGregorianDate gregorianStartDate, gregorianEndDate;
CFTimeZoneRef timeZone …Run Code Online (Sandbox Code Playgroud) 我使用名为demoLbl的OHAttributedLabel来显示带有格式化区域的文本.此标签使用Interface Builder进行布局,并连接到ViewController中的属性.将attributedText设置为标签后,我希望所有文本都显示在标签中.
如果我没有调整标签大小,则会在标签末尾裁剪文本,以便缺少其余文本.
如果我使用[demoLbl sizeToFit]; 然后标签的高度大于或小于文本(大约10个点,随文本的长度而变化),因此在我的视图底部(滚动后)给我空白区域加上标签的宽度增加了大约2点.
如果我在将原始文本(NSString)放入NSAttributedString并将其添加到标签的attributedText属性之前计算其原始高度,那么计算出的高度太小而无法将其设置为标签的高度.
是否有可以应用的黑客或技巧,以便根据NSAttributedString的高度调整标签的高度?
PS:更具体地说,我想将OHAttributedLabel添加为标签,但我还不允许这样做.
我想在名为database.db的SQLite数据库文件中删除一个表.使用后
NSLog(@"i show up in the console");
[db executeUpdate:@"DROP TABLE IF EXISTS `article`;"];
NSLog(@"i will not show up in the console");
Run Code Online (Sandbox Code Playgroud)
应用程序停在查询的位置.查询之前的NSLog显示在控制台中.查询后直接在控制台窗口中不显示NSlog.此外,在应用程序运行时,在模拟器应用程序文件夹中连续创建并删除名为database.db-journal的临时文件.该应用程序不会崩溃,不会给出任何错误,也不会继续...删除查询中的"如果EXISTS"不起作用,删除反引号不起作用,删除分号不起作用.
启用查询跟踪仅显示FMDB正在处理我的查询,没有更多显示.
我真的很困惑为什么会这样.我认为该表必须是空的才能删除它,所以我添加了一个查询来删除其中的每个记录.但是id并不重要,应用程序仍然被丢弃查询抓住了.我没有办法解决这个错误.
如果我在SQLite数据库浏览器2中执行drop命令,一切正常.
使用调试器的进一步研究表明,FMDB包装器进入无限循环,因为语句的返回值等于SQLITE_LOCKED常量,这意味着我想要丢弃的表被锁定.在先前的查询中发送"UNLOCK TABLES"并不能解决这个问题.桌子锁定的原因是什么?为什么从锁定表中删除记录会起作用?