iOS编程Cookbook第19章最后一个例子不能正常工作的解决办法

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)



在Cookbook的第19章的11节中所要解决的是在App中显示iOS自带的日历编辑视图的问题.

例子代码是选择迄今为止1年前的第一个找到的日历事件,然后将其显示在日历编辑视图中.

日历编辑视图控制器是EKEventEditViewController的实例对象,按照书上的说明,其有一个event实例变量,如果在显示该控制器之前不对其赋值,即其值为nil则出现的是一个新增Event的View,如果对其赋值一个特定的Event对象,则显示的是编辑该Event的视图.

具体代码如下:

-(void)displayEventEditController{
    EKSource *icloudSource = [self sourceInEventStore:self.eventStore sourceType:EKSourceTypeCalDAV sourceTitle:@"iCloud"];
    if (!icloudSource) {
        NSLog(@"iCloud source don't exist!!!");
        return;
    }
    NSSet *calendars = [icloudSource calendarsForEntityType:EKEntityTypeEvent];
    NSTimeInterval OneYear = 1*365*24*60*60;
    NSDate *startDate = [[NSDate date]dateByAddingTimeInterval:-OneYear];
    NSDate *endDate = [NSDate date];
    NSPredicate *predicate = [self.eventStore predicateForEventsWithStartDate:startDate endDate:endDate calendars:calendars.allObjects];
    NSArray *events = [self.eventStore eventsMatchingPredicate:predicate];
    if (events.count > 0) {
        EKEvent *event = events.firstObject;
        EKEventEditViewController *controller = [EKEventEditViewController new];
        controller.event = event;
        controller.editViewDelegate = self;
        [self.navigationController presentViewController:controller animated:YES completion:nil];
    }
}

但是在实际运行该App时发现,如果不修改选择Done或者Cancel,则没有问题.只要对原有Event进行修改再保存,都会显示错误:

Calendar: unable to save: (null)

但是从字面上不知道是神马地方出错了!

同样的Event从iOS自带的日历App中修改是没有问题的.

后来查找了文档,其中有说明:必须设置日历编辑视图控制器的eventStore实例变量为正确的stroe对象,否则不能保存.

于是将上述代码在显示控制器前位置插入以下一行即可:

controller.eventStore = self.eventStore;

再次运行App,现在可以正常保存Event了 ;)

时间: 2024-10-24 18:08:32

iOS编程Cookbook第19章最后一个例子不能正常工作的解决办法的相关文章

《Java遗传算法编程》—— 第2章 实现一个基本遗传算法 2.1 实现之前

第2章 实现一个基本遗传算法 Java遗传算法编程 在本章中,我们将开始探索实现基本遗传算法的技术.本章开发的程序,将在后面的章节中进行修改,加入功能.同时,我们也将探讨基于遗传算法的参数和配置,以及它的性能会如何变化. 要尝试运行本节中的代码,需要先在计算机上安装Java JDK.你可以从Oracle的网站上免费下载并安装Java JDK: oracle.com/technetwork/java/javase/downloads/index.html 除了安装Java JDK,你也可以选择安装

IOS设备上给body绑定click事件不生效的原因及解决办法_IOS

事件背景: 最近在做一个移动端业务的时候碰到一个bug,在ios上对body绑定click事实现事件代理冒泡至某些元素上尽然不生效. 思考: 暂借助jquery展示下事件绑定代码,将所有标签含有data-tip属性的元素通过事件代理至body $('body').on('click','[data-tip]',function(e){ console.log($(this.).attr('data-tip')) }) 这样做在android和pc上都可以正常实现,但是在ios上面对部分标签尽然不

请教大神 我这个错误是怎么回事啊?加上jsp-api.jar报一个错误,不加报另一个错误,在线跪求解决办法啊

问题描述 不加报这个错误加上报这个错误 解决方案 解决方案二:求大神速度来啊解决方案三:版本冲突第一个说你的某些Annotation没有定义第二个错误里standard-1.1.2.jar没有包含TLD,你去换一个包解决方案四:首先你得PageContext对象找不到,看看你是否引入包,或者是有没有这么类其次,你得tld文件找不到,看看你是否加入到了classpath中去,如果没有,加入试一试,如果加入了,还是出现这个问题,换一个包试一试呢!解决方案五:引用2楼holzkoepfer的回复: 版

使用oledb读写excel出现“操作必须使用一个可更新的查询”的解决办法

整了很长的时间都没有搞定,还以为是权限的问题呢,设置了以后还是不行.超郁闷的. 原来是链接语句的问题 string strCon = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + _path2 + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'"; 尤其是: Extended Properties='Excel 8.0;HDR=yes;IMEX=1'     

js 判断一个变量是否为数组完美解决办法

前端开发中,在做项目的时候,我们经常需要对一个变量进行数组类型的判断,当然即使你暂时没遇到,但是这个问题也是大家去面试时的高频问题,有必要拿出来说一说. 大家都知道js中可以使用typeof来判断变量的基本类型,如:  代码如下 复制代码 alert(typeof '111'); // "string" alert(typeof 22); // "number" alert(typeof a); // "undefined" alert(type

C#使用oledb连接excel执行Insert Into语句出现“操作必须使用一个可更新的查询”的解决办法

我发生错误时的环境:Windows 7,Framework 4.0,Microsoft Office 2007,VS2010,c# WinForm: 部分代码: string strConn = "Provider=Microsoft.Ace.OleDb.12.0;Persist Security Info=False;" + "data source=" + @excelPath + ";Extended Properties='Excel 12.0;

分享一个控制JS 浏览器缓存的解决办法。

 JS 缓存的问题一直都是我们又爱又恨的东西.也是我们比较头痛的问题,          一方面为了提高网站响应速度,减少服务器的负担,和节省带宽,将需要将静态资源缓存在客户端,          但是另一方面,当js 文件有改动的时候,如何快速的将客户端缓存的js文件都失效,这是非常头痛的问题.          以至于每次客户反馈问题的时候,我们第一个解决办法都是清理浏览器缓存.            那么如何解决呢.            1. 直接禁止全部的静态文件缓存         

《.net编程先锋C#》第三章 第一个C#应用程序(转)

编程|程序 第三章 第一个C#应用程序 3.0 选择一个编辑器尽管我是一个顽固的Notepad狂,但这次我不建议用它编辑源码.原因是你正在与真正的编程语言打交道,使用Notepad编辑源码编译时可能产生大量的错误信息行(C++程序员知道我在说什么.)你有几种选择.可以重新配置你信任的老式Visual C++ 6.0,使它能够和C#源文件一起工作.第二种选择是使用新的Visual Studio 7.第三,你可以用任何第三方程序编辑器,最好要支持行数.色彩编码.工具集成和良好的搜索功能.CodeWr

《iOS编程指南》——1.3节做好了用户自然会来

1.3 做好了用户自然会来iOS编程指南在本章的前面,我一直在说Web应用不好做,因为它们对网络的依赖性太强.其实也不完全是这样,HTML5支持离线缓存,可以在很大程度上解决这个问题,尽管会受到比较大的限制.不过,本地化应用的最大优势是App Store所营造的生态圈,相对于Web这个巨大的空间,App Store要小多了,即使现在App Store变得越来越拥挤,但是依然比Web小得多,用户可以很容易在其中找到你的应用,有了用户也就有了收益. 通过App Store这个平台,用户可以更方便地查