在Developer Library的帮助下,我正在尝试使用EventKit和EventKitUI框架.我遇到了很早的障碍.我复制并粘贴了
code from the library found here.我在ViewController的导航栏中添加了一个名为’AddEventViewController’的视图控制器,我正在使用此代码调用它.
- (IBAction)add:(id)sender { AddEventViewController *addController = [[AddEventViewController alloc] init]; addController.delegate = self; UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:addController]; [self presentViewController:navigationController animated:YES completion: nil];
}
错误显示在行:addController.delegate = self;
此代码直接从库中复制.我正在使用Xcode 4.2和故事板,如果这可能会有所帮助.
更新:
这是AddEventViewController.h:
#import <UIKit/UIKit.h> @interface AddEventViewController : UIViewController @end
你要告诉我我错误地创建了这个ViewController吗?请解释为什么如果你这么好看就不“如何”?
解决方法
我看到Apple的例子在这里可能会让你感到困惑.首先,下载
iPhoneCoreDataRecipes的完整源代码(或至少在尝试理解此代码时引用它).
要真正了解这里发生了什么,您需要阅读“解雇呈现的视图控制器”一节,然后点击“使用委派与其他控制器通信”链接. (“一个代表团?”很奇怪….)
所以这就是发生了什么.呈现的视图有一个“委托”,它应该告诉“有趣”的东西.在这种情况下,“有趣”的东西是“嘿,我添加了一个食谱!”为了实现这一点,委托实现了一个协议,这意味着它承诺实现一些方法.在这种情况下,所需的方法是recipeAddViewController:didAddRecipe:.
AddViewController有一个委托属性,如下所示:
@property(nonatomic,assign) id <RecipeAddDelegate> delegate;
这只意味着委托必须符合指定的协议.委托本身表明它在其界面中这样做:
@interface RecipeListTableViewController : UITableViewController <RecipeAddDelegate,NSFetchedResultsControllerDelegate> {
请注意,这是因为@Yuras解释的原因而被标记为分配.但是如果您正在编写针对iOS 5的新代码,则应该使用weak而不是assign.如果取消分配引用的对象,则弱属性将自动设置为nil.这样更安全.没有悬空指针.